假設(shè)您有一個大腳本,它在許多地方寫入標準輸出,直接(使用 Python 功能,如或print())和間接通過啟動寫入標準輸出的 es。loggingstdoutsubprocess有沒有一種簡單的方法來捕獲所有這些標準輸出?例如,如果您希望腳本在完成時發(fā)送一封包含所有輸出的電子郵件?!拔⒉蛔愕馈笔侵负愣ǘ皇蔷€性代碼更改。subrprocess否則,我相信您將不得不在每個調(diào)用中引入重定向參數(shù)(和一些累積邏輯) 。您可以通過重定向來捕獲腳本本身的所有輸出,但是對于所有調(diào)用,或者實際上您可能用于啟動這些子進程的任何其他類型的代碼sys.stdout,我沒有看到類似的“包羅萬象”的簡單解決方案。subprocess有沒有這樣的解決方案,或者必須使用一個運行腳本來調(diào)用這個 Python 腳本作為子進程并stdout從該子進程中捕獲所有內(nèi)容?
1 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經(jīng)驗 獲得超6個贊
可能是這樣做的最短方法,而不是特定于 python 的方法是使用os.dup2()例如:
f = open('/tmp/OUT', 'w')
os.dup2(f.fileno(), 1)
f.close()
它的作用是替換1通常是您的stdout. 使用文件描述符f(然后您可以關(guān)閉)。之后,所有寫入stdout和寫入/tmp/OUT. 這種重復是可繼承的,子進程將 fd1寫入同一個文件。
添加回答
舉報
0/150
提交
取消