2011-12-22 55 views
4

我花了好幾個小時試圖弄清楚如何將多個參數傳遞給應該由subprocess.Popen執行而沒有任何運氣的python腳本。python:爲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 

然而,當我直接從殼執行腳本

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

我接收期望的輸出一個nd錯誤消息未生成。

請指教。

回答

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列表的單獨元素。

+0

這一個,由於某種原因分別執行script.py與每個參數 – m1k3y3 2011-12-22 08:56:40

+0

@ m1k3y02 - 然後我會嘗試妥協:'['/ usr/bin/python','/tmp/script.py','MCL = NULL mtp = data ...']' – eumiro 2011-12-22 09:08:13

+0

它可以工作,但sys.argv可以將所有參數識別爲一個,所以需要額外的解析,我可以處理。非常感謝。 – m1k3y3 2011-12-22 09:30:02