На основі рішення @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")
Це набагато безпечніше, оскільки ви не можете забути ввімкнути stdout, що особливо важливо при обробці винятків.
Без with
У наступному прикладі використовуються функції увімкнення / вимкнення друку, запропоновані у попередній відповіді.
Уявіть, що існує код, який може спричинити виняток. Нам довелося використовувати finally
оператор, щоб у будь-якому випадку дозволити друк.
try:
disable_prints()
something_throwing()
enable_prints()
except ValueError as err:
handle_error(err)
finally:
enable_prints()
Якщо ви забули finally
пункт, жоден із ваших print
дзвінків більше нічого не надрукував.
Безпечніше використовувати with
оператор, який гарантує повторне ввімкнення відбитків.
Примітка: Не безпечно використовувати sys.stdout = None
, тому що хтось може викликати такі методиsys.stdout.write()