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__而不是备份变量.
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)
.
另一种选择是将您的函数包装在装饰器中。
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)