python:为Popen命令传递多个参数

时间:2011-12-22 08:44:15

标签: python parameter-passing popen

我花了几个小时试图弄清楚如何将多个参数传递给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 个答案:

答案 0 :(得分: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列表的单独元素。