【发布时间】:2018-06-05 03:23:43
【问题描述】:
我正在尝试使用 with 语句来单独抑制 sys.stdout 或 sys.stderr。 我发现 tutorial 不起作用。我正在使用Python 3.6.4,我认为本教程是Python 2 的某个版本。
I looked it up on SO 并找到了一些但应用程序不起作用或不适用于这种情况。
这不适用:Python subprocess supress stdout and stderr
无法使任何with 语句起作用:
Suppress stdout / stderr print from Python functions
这是fortran:Redirecting FORTRAN (called via F2PY) output in Python
from contextlib import contextmanager
@contextmanager
def suppress_console(file=sys.stdout):
with open(os.devnull, "w") as devnull:
old_file = file
file = devnull
try:
yield
finally:
file = old_file
with suppress_console():
print(1, file=sys.stdout)
# 1
【问题讨论】:
-
您意识到
contextlib已经包含redirect_stdout和redirect_stderr上下文管理器,对吧?只需重定向到os.devnull -
但这不起作用的原因是您只是重新分配了局部变量
old_file。您需要更改sys的属性。
标签: python stdout stderr suppress dev-null