亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法在Python中讀取stdout?

有沒有辦法在Python中讀取stdout?

慕萊塢森 2023-08-03 17:16:50
我想要的是將我在標準輸出中寫入的所有文本作為字符串獲取。from sys import stdout stdout.read()  # throws io.UnsupportedOperation: not readable我想要得到的示例:print("abc") stdout.read() == "abc"  # True
查看完整描述

3 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

不,正如文檔所說,stdout不可讀。將其視為將信息發送到物理打印機。例如,當您將一頁文本發送到傳真打印機掃描儀設備時,您的程序如何讀取該輸出?字符被發送到輸出緩沖區,向下發送到物理設備,然后刷新到紙張上。

處理這個問題的規范方法是使用日志記錄,它在大多數成熟語言(包括 Python)中都有多個支持包。您創建一個記錄器,其log方法(寫入輸出)將其輸入回顯到print您創建的另一個存儲中。您添加一個read方法來允許您訪問該商店。

這讓您需要做一些研究和一些編碼工作,但我相信您可以從這里開始。logger網上找一下教程。當然,如果您對這種編碼感到困惑,您可以在 Stack Overflow 上發布您的示例。:-)


查看完整回答
反對 回復 2023-08-03
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

如果您使用的是 3.4 或更高版本,可以在 contextlib 文檔中找到此方法


f = io.StringIO()

with contextlib.redirect_stdout(f):

   ... stuff ...


result = f.getvalue()

請注意,對 stdout 的影響是全局的,因此不要在庫或線程應用程序中使用它。


查看完整回答
反對 回復 2023-08-03
?
牧羊人nacy

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。


查看完整回答
反對 回復 2023-08-03
  • 3 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號