2013-10-21 76 views
1

使用「>>」我試圖從運行一個Python文件(2.7)命令:如何POPEN子

p=subprocess.Popen("sha256sum file1.zip >> file2.sha") 

但我得到了一個錯誤文件「>>」不存在。 我想:

p=subprocess.Popen("sha256sum file1.zip >> file2.sha".split()) 

不過還是>>是一個問題。

當然,如果我在提示行中運行命令,它會運行Ok並將輸出放入文件file2.sha。

我知道我可以添加標準輸出到Popen,但我想知道是否有一種方法來運行它像從命令行運行一樣簡單。

謝謝。

+0

你得到一個錯誤,因爲你試圖使用Popen就像它是os.system()。看看Popen的工作原理:http://docs.python.org/2/library/subprocess.html#popen-constructor –

回答

4

您可以通過子進程的標準輸入和標準輸出值POPEN像這樣:

subprocess.Popen("sha256sum file1.zip", stdout = file("file2.sha", "a")) 

注意該文件需要追加模式被打開,以實現相同的行爲>>。

+0

謝謝Ben。 warwaruk的答案也有效,但我讀到它可以導致一個安全問題使用「必須」與用戶的輸入(它獲得一個文件名),所以我會使用stdout來代替。 – ZoRo

+1

爲了在父進程中關閉文件時更加明確,可以使用'with'-statement:'with open('file2.sha','ab')作爲文件:subprocess.check_call([「sha256sum」 ,「file1.zip」],stdout = file)' – jfs

2

我認爲你應該使用shell=True argumentPopen

如果外殼爲True,指定的命令將通過 外殼執行。如果您主要將Python用於其在大多數系統shell中提供的增強控制流,並且仍然希望 可以方便地訪問其他shell功能,如shell管道, 文件名通配符,環境變量擴展和〜 的擴展到用戶的主目錄。

subprocess.Popen("sha256sum file1.zip >> file2.sha", shell=True)