我有一个需要在我的代码中导入的库。然而,每当它被导入时,它会在控制台输出几行数据。我该如何抑制输出?
谢谢
谢谢
import os
import sys
# silence command-line output temporarily
sys.stdout, sys.stderr = os.devnull, os.devnull
# import the desired library
import library
# unsilence command-line output
sys.stdout, sys.stderr = sys.__stdout__, sys.__stderr__
sys.stdout = sys.stderr = os.devnull
。该代码可以将标准输出和标准错误流重定向到 /dev/null
,以消除不必要的输出。 - Benimport sys import os print("hello world") sys.stdout = sys.stderr = os.devnull print("hello world")
- Björnimport sys import os print("hello world") sys.stdout = sys.stderr = os.devnull print("hello world")
- undefinedimport io
import sys
#setup text trap
text_trap = io.StringIO()
sys.stdout = text_trap
#to reset the text trap
sys.stdout = sys.__stdout__
from io import BytesIO as StringIO
import sys
if __name__ == "__main__":
print "hello1"
#setup text trap
text_trap = StringIO()
sys.stdout = text_trap
print("hello2")
#reset
sys.stdout = sys.__stdout__
print "hello3"
输出:
hello1
hello3
with suppress_stdout_stderr():
import library_with_import_message
上下文管理器:
# Via Stack Overflow
# https://dev59.com/_2gu5IYBdhLWcg3wt5Lt
# Via gist https://gist.github.com/vikjam/755930297430091d8d8df70ac89ea9e2
import os
from contextlib import contextmanager, redirect_stderr, redirect_stdout
@contextmanager
def suppress_stdout_stderr():
"""A context manager that redirects stdout and stderr to devnull"""
with open(os.devnull, 'w') as fnull:
with redirect_stderr(fnull) as err, redirect_stdout(fnull) as out:
yield (err, out)