如何解决有没有办法在python中读取stdout?
我想要的是获取我在stdout中编写的所有文本作为字符串。
rsync -bauvn --compare-dest /externalharddrive /desktopfolder/ /thirddestination
我想要得到的例子:
from sys import stdout
stdout.read() # throws io.UnsupportedOperation: not readable
解决方法
不。如文档所述,stdout
不可读。可以将其视为向物理打印机发送信息。例如,当您将文本页面发送到FAX-打印机-扫描仪设备时,程序将如何读取该输出?字符被发送到输出缓冲区,再到物理设备,然后刷新到纸张上。
处理此问题的标准方法是使用日志记录,日志记录包含大多数成熟语言(包括Python)中的多个支持包。您创建了一个记录器,该记录器的log
方法(写输出)将其输入回显到print
和您创建的另一个存储中。您添加了一个read
方法以使您可以访问该商店。
这使您可以做一些研究并进行一些编码工作,但是我相信您可以从这里开始。寻找在线的logger
教程。当然,如果您对这种编码感到困惑,可以将示例发布在Stack Overflow上。 :-)
如果您使用的是3.4或更高版本,则此文档可在contextlib文档中找到
f = io.StringIO()
with contextlib.redirect_stdout(f):
... stuff ...
result = f.getvalue()
请注意,对stdout的影响是全局的,因此请勿在库或线程应用程序中使用它。
,如果您不想使用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
打印的输出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。