我試圖做一個Mac版本的程序,在Windows下運行良好,使用Python 2.7。在Mac(在VirtualBox中運行的OS X El Capitan)下,它失敗了,因爲我傳遞給shell的參數無法正確識別。Python 2 subprocess參數錯誤在Mac
原始代碼:
for item in source_files:
# core process
output = sub.Popen(["mhl", "verify", "-vv", "-f", item, ">", text_report],
shell=True,
stdout=sub.PIPE,
stderr=sub.PIPE)
stdout_value, stderr_value = output.communicate()
在Mac只有 'MHL' 的說法是公認的,所以我嘗試這樣做:
sub.Popen(['mhl verify -vv -f', item, '>', text_report]
現在命令工作,但該項目(一.mhl文件)不承認,所以我嘗試這樣做:
sub.Popen(['mhl verify -vv -f', '/Users/simon/Documents/Documents.mhl', '>', text_report]
這:
sub.Popen(['mhl verify -vv -f', r'/Users/simon/Documents/Documents.mhl', '>', text_report]
同樣的結果,它告訴我一個mhl文件應該遵循'-f'參數。如果我直接將項目添加到第一個參數,它工作正常:
sub.Popen(['mhl verify -vv -f /Users/simon/Documents/Documents.mhl', '>', text_report]
我在這裏錯過了什麼?
感謝您的回答,但它不起作用,與原始代碼一樣,只有'mhl'參數被識別,它告訴我'參數的數量無效'。實際上'mhl verify -vv -f'被正確識別爲使用'verify -vv -f'參數調用mhl可執行文件,但它告訴我一個mhl文件應該遵循'-f'參數。 –
@SimonTheChain:你也傳入'item','>'和'text_report'。 –
@SimonTheChain:更新;我錯過了你有'shell = True'設置。你仍然有一個命令'mhl verify -vv -f item'在這裏執行。 –