Python:传递多个参数用于Popen命令

4

我花费了多个小时尝试弄清楚如何将多个参数传递给Python脚本,而这个脚本应该由subprocess.Popen执行,但没有成功。

脚本:

command = ['/usr/bin/python', '/tmp/script.py mcl=NULL mtp=data mnm=DS4INST \
          mno=NULL mse=NULL mce=cll01'] 

result = subprocess.Popen(command, stdout = subprocess.PIPE, \
         stderr = subprocess.PIPE)

out, err = result.communicate()

print out, err 

我收到以下错误信息:

我收到以下错误信息:

python: can't open file '/tmp/script.py mcl=NULL mtp=data mnm=DS4INST mno=NULL \
mse=NULL mce=cll01': [Errno 2] No such file or directory 

然而,当我直接从Shell执行脚本时,
/usr/bin/python /tmp/script.py mcl=NULL mtp=data mnm=DS4INST mno=NULL \
mse=NULL mce=cll01

我得到了期望的输出,没有生成错误信息。
请给予建议。
1个回答

6

试试这个:

command = ['/usr/bin/python', '/tmp/script.py', 'mcl=NULL', 'mtp=data', 'mnm=DS4INST', 'mno=NULL' 'mse=NULL', 'mce=cll01'] 

在您的代码中,command的第二个元素被视为一个单独的参数,并被解释为:

/usr/bin/python "/tmp/script.py mcl=NULL mtp=data mnm=DS4INST mno=NULL mse=NULL mce=cll01"

就像带有空格的长文件名一样。

您需要将参数拆分为command列表的单独元素。


由于某种原因,此代码会将每个参数分别传递给 script.py 并执行。 - m1k3y3
@m1k3y02 - 我会尝试一个妥协方案:['/usr/bin/python', '/tmp/script.py', 'mcl=NULL mtp=data …'] - eumiro
它可以工作,但是sys.argv将所有参数识别为一个,因此需要进行额外的解析,这是我可以处理的。非常感谢。 - m1k3y3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接