【发布时间】:2011-10-11 09:48:37
【问题描述】:
是否可以在 Python 中临时重定向 stdout/stderr(即在方法的持续时间内)?
编辑:
当前解决方案的问题(我起初记得但后来忘记了)是它们不重定向;相反,它们只是完全替换了流。因此,如果某个方法出于任何原因(例如,因为流作为参数传递给某物)而具有一个变量的本地副本,则它将不起作用。
有什么解决办法吗?
【问题讨论】:
-
重定向 stdout/stderr 并不少见(或者至少不是闻所未闻)——这里的答案很好地解释了这个过程。
-
@TokenMacGuy:虽然你永远不应该编写输出到
stderr或stdout的库代码,但你不能总是避免使用那种代码。 -
@Mehrdad 尝试在代码中替换 sys.__stdout__ 的第一件事,在导入第三方模块
-
@Rob:我想你错过了我标题中的第二个单词。 :-)
-
@Mehrdad 不。用您自己的类似流的对象(即实现
.write())在代码的早期替换 sys.__stdout__。所有对 sys.stdout 的引用都指向它。让它代理可变流,默认为标准输出。然后,您应该能够随意切换代理流。我没试过这个;我在大声思考。
标签: python redirect stdout stderr