2017-05-05 127 views
0

我有一個python腳本,我使用subprocess.getoutput()運行cmd,並將結果輸出存儲在列表中。現在,我需要能夠將腳本更改爲目標目錄並在那裏運行命令。它應該很簡單,但將cwd arg傳遞給getoutput()不起作用。python subprocess - 如何更改目錄運行命令?

任何想法?

例子:

out = subprocess.getoutput(" ".join(cmd), cwd='/my/target/path').splitlines() 

從它看起來像我可以很容易地做到這一點與subprocess.Popen,但隨後得到的輸出到字符串列表很困難的文檔。我只能將結果放入二進制字符串列表中。

+0

'cwd'不是'getoutput'的有效參數,所以你得到一個異常,而不是一個列表。你用'cwd'還是得到'bytes'列表的問題? – tdelaney

回答

1

subprocess.getoutputLegacy Shell Invocation Function。它不需要cwd參數並返回一個(status, output)的元組。在您進入bytes列表之前,您有幾個問題。

當python運行一個程序時,它不知道它的輸出將以什麼編碼提供。假設編碼爲'UTF-8' ,基本操作是

mylist = [] 
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd='/my/target/path') 
for line in mylist: 
    mylist.append(line.decode('utf-8')) 
proc.wait() 

在此實現,任何寫入stderr只是去到你的程序stderr。還要注意,我把這個命令保存爲一個列表並且沒有做shell=True。有幾個幫助函數可以爲你做一些工作,但這已經很簡單了。