Python:编写命令行指令时的字符串格式

时间:2017-11-11 18:05:57

标签: python string arguments subprocess call

我有一个任务,我必须每次运行一组参数略有不同的模拟。我想写一个Python脚本来自动化这个,但我遇到了问题。

为了简化描述,我基本上从命令行调用N模拟,每个模拟都有一组不同的参数,我希望脚本逐个执行。想象一下,要运行模拟,我会将execute_simulation...写入命令行,其中...代表给定模拟的参数。这就是我的脚本:

from subprocess import call

<code>

for i in range(0, N):
    call('execute_simulation_%s' % ( parameters[i]))

但是,我总是在调用脚本时收到错误消息。任何人都可以建议为什么会出现这种情况?

1 个答案:

答案 0 :(得分:0)

如果您包含错误消息会很有帮助,但无论如何我都会尽力帮助您。

->save函数需要一系列字符串而不是单个字符串(尽管227518698 | Rui | G | 2015 | 100 227518699 | Sara | G | 2016 | 100 227518693 | Paulo Pereira | G | 2014 | 43 227518691 | Diogo Batista | G | 2017 | 2 文档声明它们在Windows上转换为字符串,因此它可能在特定情况下工作)。

此外,在您提供的示例代码中,您执行了call。如果Popen不是字符串而是列表,则会在该对象上调用元组,生成器或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,因为建议在Python 3.5+代码中使用它(它的工作方式与args = [f'arg{i}' for i in range(5)] parameters = [args for i in range(5)] for args in parameters: call(('execute_simulation', *args)) 类似)。 我希望这适用于你的情况。