38

如何使用 subprocess 模块运行 bash 脚本,我必须给它几个参数?

这是我目前正在使用的:

subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3], \
    shell = True)

bash 脚本似乎没有包含任何参数。非常感谢任何见解!

4

5 回答 5

50

将参数作为列表传递,请参阅文档中的第一个代码示例

import subprocess

subprocess.check_call(['/my/file/path/programname.sh', 'arg1', 'arg2', arg3])

如果arg3不是字符串;check_call()在传递给:之前将其转换为字符串arg3 = str(arg3)

于 2013-06-21T19:57:48.663 回答
11
subprocess.Popen(['/my/file/path/programname.sh arg1 arg2 %s' % arg3], shell = True).

如果您使用shell = True脚本,它的参数必须作为字符串传递。序列中的任何其他元素args都将被视为 shell 的参数。

您可以在http://docs.python.org/2/library/subprocess.html#subprocess.Popen找到完整的文档。

于 2013-06-21T19:48:48.657 回答
3

再举一个例子,上面所有的例子都没有,

subprocess.Popen(['/your/script.sh %s %s %s' %(argument1,argument2,argument3)], shell = True)

请注意,当您键入时,和%(argument1,argument2,argument3)之间不应有任何空格,例如无效。 %(% (argument1,argument2,argument3)

于 2017-10-11T10:39:19.227 回答
2

嗨,我知道这是解决方案很晚,但可以帮助某人。

例子:

import subprocess
pass_arg=[]
pass_arg[0]="/home/test.sh"
pass_arg[1]="arg1"
pass_arg[2]="arg2"

subprocess.check_call(pass_arg)

上面的示例将 arg1 和 arg2 作为参数提供给 shell 脚本 test.sh

本质上, subprocess 需要一个数组。因此,您可以填充一个数组并将其作为参数提供。

于 2016-10-23T04:02:19.900 回答
1

你忘了加args名字。

subprocess.Popen(args=['./test.sh', 'arg1 arg2 %s' % arg3], shell=True)
于 2013-06-21T19:33:17.463 回答