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。
添加回答
举报