防止在Python的批处理控制台中打印函数

Nic*_*ati 20 python printing batch-file

好吧,标题似乎对我来说足够了.我使用一些功能,在某些点打印控制台中的东西.由于我无法修改它们,我想知道在使用这些功能时是否存在不打印的解决方案.

非常感谢 !

尼科

Con*_*ius 29

是的,你可以重定向sys.stdout:

import sys
import os

sys.stdout = open(os.devnull, "w")

my_nasty_function()

sys.stdout = sys.__stdout__
Run Code Online (Sandbox Code Playgroud)

只需替换my_nasty_function您的实际功能.

编辑:现在应该在Windows上工作,并使用sys.__stdout__而不是备份变量.

  • @ekhumoro`backup_stdout`是一个更好的解决方案,因为调用者可以使用类似的措施来处理您的代码:)我的意思是,*恢复*`stdout`实际上应该*恢复*初始值,而不是*将其设置为任意值。 (2认同)

var*_*tec 8

Constantinius的答案是肯定的,但是没有必要实际打开null设备.顺便说一句,如果你想要便携式空设备,那就有了os.devnull.

实际上,你所需要的只是一个会忽略你写给它的东西的类.因此更便携的版本将是:

class NullIO(StringIO):
    def write(self, txt):
       pass

sys.stdout = NullIO()

my_nasty_function()

sys.stdout = sys.__stdout__
Run Code Online (Sandbox Code Playgroud)

.


Jar*_*rno 5

另一种选择是将您的函数包装在装饰器中。

from contextlib import redirect_stdout
from io import StringIO 

class NullIO(StringIO):
    def write(self, txt):
        pass


def silent(fn):
    """Decorator to silence functions."""
    def silent_fn(*args, **kwargs):
        with redirect_stdout(NullIO()):
            return fn(*args, **kwargs)
    return silent_fn


def nasty():
    """Useful function with nasty prints."""
    print('a lot of annoying output')
    return 42


# Wrap in decorator to prevent printing.
silent_nasty = silent(nasty)
# Same output, but prints only once.
print(nasty(), silent_nasty())
Run Code Online (Sandbox Code Playgroud)