我正在編譯一個命令在python unix系統上執行,包含多個管道步驟。例如: -錯誤檢查管道命令在python中爲unix
grep foo myfile | cmd1 | cmd2 > output
這些對應於在具有foo
在他們myfile
條目的一系列的變換。我有時將其構造爲os.system
執行的命令,在其他情況下使用subprocess
模塊執行。
如何從Python中對管道的每個部分執行錯誤檢查?例如,在99%的情況下,myfile
中有foo
條目,其餘管道工程。但是,如果由於某種原因myfile
存在但不包含foo
條目,則管道的其餘部分會因爲管道空文件而中斷,而其餘命令需要非空輸入才能工作。這使得它很難調試,因爲你看到的是一個破裂的管道輸出,不知道這中間步驟失敗。
有沒有一種方法來構建Python中的錯誤檢查中間步驟的管道?例如。檢查管道的grep
部分是否確實包含某些輸出,grep
的輸入上的cmd1
輸出是否還包含某些輸出,依此類推?謝謝。
做到這一點,最簡單的方法是做事情本地在Python中。調用從OS來回和Python只是引入了額外的變量和通常最好在第一時間避免了複雜性。 –
所以,你會怎麼做它在Python,如果它需要調用外部命令?我知道的唯一方法是''subprocess''。我無法改寫我在Python中調用的所有命令 – user248237dfsf
在bash中,您有PIPESTATUS變量 - 如果可以的話使用。 否則就像在sr2222建議的python中那樣做 - 設置管道,用重定向輸入輸出啓動程序,檢查它們的退出狀態,那有什麼問題?你提到的模塊甚至以stdin/stdout/stderr作爲參數! – loreb