【发布时间】:2023-01-13 05:25:21
【问题描述】:
当我运行以下代码时,没有打印任何错误消息,而且它似乎无声地失败了。我希望将字符串 "BLAH" 打印到控制台。
from contextlib import redirect_stdout
import io # the initialism `io` represents `INPUT OUTPUT LIBRARY`
def run_solver():
print("solver is running")
with io.StringIO() as fake_std_out:
with redirect_stdout(fake_std_out):
print("BLAH") # THIS IS NEVER PRINTED
run_solver()
data = fake_std_out.getvalue()
print(data)
print("THE END")
我期望的输出是:
BLAH
solver is running
THE END
相反,我们有:
THE END
编辑
- 我现在意识到我想复制标准输出,而不是重定向它。
- 使用
print打印字符串流的内容将不起作用,因为打印函数的目标现在是字符串流而不是系统控制台。在调用getvalue()之后,再尝试使用 print 语句是没有意义的。
【问题讨论】:
-
它完全按照你的要求去做。 stdout 被重定向到 fake_std_out。你认为 redirect_stdout 会做什么?
-
print写入标准输出(无论是什么),而不是直接写入控制台。 -
您的问题实际上是在问“当标准输出被重定向到其他地方时,我如何打印到真正的标准输出?”答案是,
print("BLAH", file=sys.__stdout__)
标签: python python-3.x with-statement silent