有没有办法在Python中读取stdout?

我想要的是将我在标准输出中写入的所有文本作为字符串获取。

from sys import stdout

stdout.read()  # throws io.UnsupportedOperation: not readable

我想要得到的示例:

print("abc")
stdout.read() == "abc"  # True


慕莱坞森
浏览 107回答 3
3回答

潇湘沐

不,正如文档所说,stdout不可读。将其视为将信息发送到物理打印机。例如,当您将一页文本发送到传真打印机扫描仪设备时,您的程序如何读取该输出?字符被发送到输出缓冲区,向下发送到物理设备,然后刷新到纸张上。处理这个问题的规范方法是使用日志记录,它在大多数成熟语言(包括 Python)中都有多个支持包。您创建一个记录器,其log方法(写入输出)将其输入回显到print您创建的另一个存储中。您添加一个read方法来允许您访问该商店。这让您需要做一些研究和一些编码工作,但我相信您可以从这里开始。logger网上找一下教程。当然,如果您对这种编码感到困惑,您可以在 Stack Overflow 上发布您的示例。:-)

子衿沉夜

如果您使用的是 3.4 或更高版本,可以在 contextlib 文档中找到此方法f = io.StringIO()with contextlib.redirect_stdout(f):   ... stuff ...result = f.getvalue()请注意,对 stdout 的影响是全局的,因此不要在库或线程应用程序中使用它。

牧羊人nacy

如果您不想使用logger,您可以创建自定义打印功能:from io import StringIOprintstore = StringIO()def myprint(*args, **kwargs):    print(*args, **kwargs) # unmodified print    kwargs["file"] = printstore    print(*args, **kwargs) # print to StringIO这样做的优点是您可以获得内置print.一个缺点是它只捕获用 打印的输出myprint。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python