3 回答

TA貢獻1816條經驗 獲得超6個贊
不,正如文檔所說,stdout
不可讀。將其視為將信息發送到物理打印機。例如,當您將一頁文本發送到傳真打印機掃描儀設備時,您的程序如何讀取該輸出?字符被發送到輸出緩沖區,向下發送到物理設備,然后刷新到紙張上。
處理這個問題的規范方法是使用日志記錄,它在大多數成熟語言(包括 Python)中都有多個支持包。您創建一個記錄器,其log
方法(寫入輸出)將其輸入回顯到print
您創建的另一個存儲中。您添加一個read
方法來允許您訪問該商店。
這讓您需要做一些研究和一些編碼工作,但我相信您可以從這里開始。logger
網上找一下教程。當然,如果您對這種編碼感到困惑,您可以在 Stack Overflow 上發布您的示例。:-)

TA貢獻1828條經驗 獲得超3個贊
如果您使用的是 3.4 或更高版本,可以在 contextlib 文檔中找到此方法
f = io.StringIO()
with contextlib.redirect_stdout(f):
... stuff ...
result = f.getvalue()
請注意,對 stdout 的影響是全局的,因此不要在庫或線程應用程序中使用它。

TA貢獻1862條經驗 獲得超7個贊
如果您不想使用logger,您可以創建自定義打印功能:
from io import StringIO
printstore = StringIO()
def myprint(*args, **kwargs):
print(*args, **kwargs) # unmodified print
kwargs["file"] = printstore
print(*args, **kwargs) # print to StringIO
這樣做的優點是您可以獲得內置print.
一個缺點是它只捕獲用 打印的輸出myprint。
添加回答
舉報