我寫了一段簡單的代碼:subprocess.Popen給出隨機結果
import subprocess
p=subprocess.Popen('mkdir -p ./{a,b,c}', shell=True, stderr=subprocess.STDOUT)
p.wait()
不幸的是,它並不總是表現我所希望的方式。也就是說,當我在PC上運行它時,一切正常(ls -l給我三個dirs:a,b和c)。但是當我的同事在桌面上運行它時,他得到了......一個名爲'{a,b,c}'的目錄...我們都使用Python 2.7.3。這是爲什麼?你將如何解決它?
我試圖自己找到答案。根據手冊: 「args應該是程序參數序列或單個字符串,默認情況下,如果args是序列,則要執行的程序是args中的第一個項目。如果args是字符串,則解釋是平臺 - 依賴和下面描述。請參閱shell和可執行參數以獲得與默認行爲的其他差異。除非另有說明,否則建議將args作爲序列傳遞。
於是,我在shell執行代碼:
python -c "import subprocess; p=subprocess.Popen(['mkdir', '-p', './{ea,fa,ga}'], shell=True, stderr=subprocess.STDOUT); p.wait()"
而且我得到了:
mkdir: missing operand
我將感謝任何意見
謝謝!
你(和你的同事)在哪個操作系統上運行它?如果兩個linux,你用的是什麼shell? –
不同的殼可能會給出不同的結果。 – dilbert
重複http://stackoverflow.com/questions/16029871/how-to-run-os-mkdir-with-p-option-in-python – endragor