3 回答

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

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

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