我的python应该用五个参数执行/home/file.sh,如下所示。但是,每次执行我的python脚本时,它都会忽略参数,而shell脚本会使用默认值执行。我也尝试将shell转为False,但没有成功。有任何想法吗 ?提前谢谢!
var1='-t'
var2='m'
var3='20130105'
var4='-f'
var5='test.txt'
process=subprocess.Popen(['/home/file.sh', str(var1), str(var2), str(var3), str(var4), str(var5)],shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.wait()
lists=process.communicate()[0]
我尝试过以下操作,但它再次使用默认参数
process=subprocess.Popen(['/home/file.sh -t m 20140105 -f test.txt')],shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
答案 0 :(得分:0)
尝试如下:
process=subprocess.Popen('/home/file.sh -t m 20140105 -f test.txt', shell=True, ...)
不用担心为你的命令传递一个列表。
答案 1 :(得分:0)
您可以使用参数列表并设置shell=False
,例如
process=subprocess.Popen(["./test.sh","a","b","c"], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print process.communicate()[0]
或者您可以使用字符串参数并让shell通过设置shell=True
来解析它,例如
process=subprocess.Popen("./test.sh a b c", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print process.communicate()[0]
但使用shell=True
时无法发送列表。
两者都会输出
0: ./test.sh
1: a
2: b
3: c
如果test.sh是一个包含以下内容的可执行文件:
#!/bin/sh
echo 0: $0
echo 1: $1
echo 2: $2
echo 3: $3
通常,我更喜欢使用shell=False
来避免必须转义参数字符串(这比实现这一点要复杂得多)。使用shell有一些优点,例如扩展路径,能够使用shell内部等等。