如何使用子进程模块运行bash脚本,我必须给出几个参数?
这就是我目前使用的:
subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3], \
shell = True)
bash脚本似乎没有采用任何参数。非常感谢任何见解!
答案 0 :(得分:33)
将参数作为列表传递,请参阅the very first code example in the docs:
import subprocess
subprocess.check_call(['/my/file/path/programname.sh', 'arg1', 'arg2', arg3])
如果arg3
不是字符串;在传递给check_call()
之前将其转换为字符串:arg3 = str(arg3)
。
答案 1 :(得分:4)
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找到完整的文档。
答案 2 :(得分: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需要一个数组。因此,您可以填充数组并将其作为参数提供。
答案 3 :(得分:0)
还有一个例子,它不包含在上述所有例子中,
subprocess.Popen(['/your/script.sh %s %s %s' %(argument1,argument2,argument3)], shell = True)
请注意,当您输入%(argument1,argument2,argument3)
时,%
和(
之间不应有任何空格,例如% (argument1,argument2,argument3)
无效。
答案 4 :(得分:-1)
您忘记添加args
名称。
subprocess.Popen(args=['./test.sh', 'arg1 arg2 %s' % arg3], shell=True)