簡體   English   中英

您如何輕松更改 Python 腳本以捕獲其自身及其子進程寫入標准輸出的所有內容?

[英]How do you trivially change a Python script to capture everything written to stdout by itself and its subprocesses?

假設您有一個大腳本在許多地方寫入標准輸出,直接(使用 Python 功能,如print()loggingstdout )和間接通過啟動寫入標准輸出的subprocess es。

有沒有一種簡單的方法來捕獲所有這些標准輸出?

例如,如果您希望腳本在完成時發送 email 及其所有 output。

“微不足道”是指恆定而不是線性代碼更改。 否則,我相信您將不得不在每個subrprocess調用中引入重定向參數(和一些累積邏輯)。 您可以通過重定向sys.stdout來捕獲腳本本身的所有 output ,但是對於所有subprocess調用,或者實際上您可能用於啟動的任何其他類型的代碼,我都沒有看到類似的“包羅萬象”的簡單解決方案這些子流程。

有沒有這樣的解決方案,或者必須使用一個運行腳本來調用這個 Python 腳本作為子進程並從該子進程中捕獲所有stdout

可能最短的方法是使用os.dup2()例如:

f = open('/tmp/OUT', 'w')
os.dup2(f.fileno(), 1)
f.close()

它的作用是替換通常是您的stdout的文件描述符1 使用f的文件描述符(然后您可以關閉)。 之后,所有寫入stdout/tmp/OUT 這種重復是可繼承的,子進程將 fd 1寫入同一個文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM