На основе решения @FakeRainBrigand я предлагаю более безопасное решение:
import os, sys
class HiddenPrints:
def __enter__(self):
self._original_stdout = sys.stdout
sys.stdout = open(os.devnull, 'w')
def __exit__(self, exc_type, exc_val, exc_tb):
sys.stdout.close()
sys.stdout = self._original_stdout
Тогда вы можете использовать это так:
with HiddenPrints():
print("This will not be printed")
print("This will be printed as before")
Это намного безопаснее, потому что вы не можете забыть снова включить стандартный вывод, что особенно важно при обработке исключений.
# This is an example of not-so-good solution
# without 'with' context manager statement.
try:
disable_prints()
something_throwing()
# enable_prints() This wouldn't be enough!
except ValueError:
handle_error()
finally:
enable_prints() # That's where it needs to go.
Если вы забыли предложение finally
, ни один из ваших вызовов print
больше ничего не напечатает. Используя оператор with
, этого не может быть.
Использование sys.stdout = None
небезопасно, потому что кто-то может вызывать такие методы, как sys.stdout.write ()