抑制打印为stdout python

Moh*_*hit 11 python

好的..所以可能一个例子是解释这个问题的好方法

所以我有这样的事情:

if __name__=="__main__"
    result = foobar()
    sys.stdout.write(str(result))
    sys.stdout.flush()
    sys.exit(0)
Run Code Online (Sandbox Code Playgroud)

现在这个脚本是从ruby脚本调用的..基本上它在那里解析结果.但是foobar()有很多打印声明..而且stdout也刷新了所有这些打印件.有没有办法(除了记录mathods)我可以在这里修改一些自动抑制那些打印的东西,只是刷新这个结果?谢谢

g.d*_*d.c 18

您想暂时隐藏(或隐藏)stdout.像这样的东西:

actualstdout = sys.stdout
sys.stdout = StringIO()
result = foobar()
sys.stdout = actualstdout
sys.stdout.write(str(result))
sys.stdout.flush()
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)

您需要为sys.stdout分配类似文件的内容,以便其他方法可以有效地使用它. StringIO是一个很好的候选者,因为它不需要磁盘访问(它只会在内存中收集),然后被丢弃.

  • 那么使用`sys.stdout = open(os.devnull,'w')`而不是`StringIO()`呢? (5认同)
  • 对于任何像我一样出现的人...不要在ipython控制台内尝试这个:) (2认同)

Fel*_*elk 8

使用Python 3.4及更高版本,您可以使用redirect_stdout contextmanager,如下所示:

with redirect_stdout(open(os.devnull, "w")):
    print("This text goes nowhere")
print("This text gets printed normally")
Run Code Online (Sandbox Code Playgroud)