【问题标题】:How to use a with statement to disable printing?如何使用 with 语句禁用打印?
【发布时间】:2019-08-07 11:25:38
【问题描述】:

我想用这样的东西:

print('Hello')
with dont_print():
    print('some other text')
    print('more text')

print('World')

输出应该是:

Hello
World

所以dont_print 中的所有内容都不会被打印出来。 我怎样才能得到这样的功能?

【问题讨论】:

标签: python python-3.x printing


【解决方案1】:
from unittest.mock import patch

print('Hello')
with patch('builtins.print'):
    print('some other text')
    print('more text')

print('World')

【讨论】:

    【解决方案2】:

    将您的标准输出覆盖到某个文件对象。这是您的修改版本。

    import sys, os
    
    # Disable
    def blockPrint():
        sys.stdout = open(os.devnull, 'w')
    
    # Restore
    def enablePrint():
        sys.stdout = sys.__stdout__
    
    
    print('Hello')
    
    blockPrint()
    print('some other text')
    print('more text')
    
    enablePrint()
    print('World')
    

    更多关于here

    【讨论】:

      【解决方案3】:

      您可以使用redirect_stdout 作为上下文管理器,通过os.devnull 将标准输出重定向到虚无:

      import os
      from contextlib import redirect_stdout
      
      print('Hello')
      with open(os.devnull, 'w') as f:
          with redirect_stdout(f):
              print('some other text')
              print('more text')
      print('World')
      

      【讨论】: