Python:编写命令行指令时的字符串格式化
问题描述:
我有一个任务,我必须每次运行一系列参数略有不同的仿真。我想编写一个Python脚本来自动执行此操作,但我遇到了一个问题。Python:编写命令行指令时的字符串格式化
为了简化描述,我基本上有从命令行调用的N
模拟,每个模拟都有一组不同的参数,我希望脚本一个接一个地执行它们。想象一下,要运行模拟,我会将execute_simulation...
写入命令行,其中...
代表给定模拟的参数。这是我的脚本看起来像:
from subprocess import call
<code>
for i in range(0, N):
call('execute_simulation_%s' % (parameters[i]))
但是,我总是在调用脚本时收到错误消息。任何人都可以提出为什么这可能是这种情况?
答
如果您包含错误消息,但我会尽力帮助您。
的call
功能将字符串的顺序不是一个字符串(虽然Popen
文档指出它们转换为Windows上的字符串,因此它可能在特定的情况下工作)。
此外,在您给出的示例代码中,您做了call('execute_simulation_%s' % (parameters[i]))
。如果parameters[i]
不是字符串,而是列表,元组,生成器或str
将在该对象上调用,这意味着您得到类似execute_simulation ['arg0', 'arg1', 'arg2', 'arg3', 'arg4']
的东西。这可能不是你想要的。您可以在序列上拨打' '.join
以获得类似execute_simulation arg0 arg1 arg2 arg3 arg4
的内容。
这样说的话,我认为parameters
列表包含每个调用的参数列表。然后,你可以只是做
args = [f'arg{i}' for i in range(5)]
parameters = [args for i in range(5)]
for args in parameters:
call(('execute_simulation', *args))
而且,考虑使用subprocess.run
,因为它建议在Python使用3.5+代码(它的工作原理就像call
)。 我希望这适用于你的情况。
什么是错误信息? ['call'](https://docs.python.org/2.7/library/subprocess.html#subprocess.call)需要一个参数列表,而不是一个字符串(除非你使用'shell = True',你应该避免)。 – 2017-11-11 18:11:23
什么错误消息? –
准确的模拟文件是什么?你的'parameters []'是否也包含文件扩展名? 'call('ca%s.exe'%'lc')'正在为我工作(Win7)。 – bastelflp