Операции print и метод write объекта sys.stdout эквиватлентны. Это дает возможность переназначения sys.stdout в любой определяемый польтзователем объект, который предоставляет тот же самый метод write, что и файловые объекты. Поскольку оператор print всего лишь отправояет текст методу sys.stdout.write вы межете перехватить текст в своих программах, присваивая sys.stdout объект, метод write которого обрабатывается текст произвольными способами. Например ``` def fib5(n: int) -> int: if n == 0: return n last: int = 0 next: int = 1 for _ in range(1, n): print(_) last, next = next, last + next return next if __name__ == '__main__': print(fib5(10)) ``` Исправляем на ``` import sys def fib5(n: int) -> int: if n == 0: return n last: int = 0 next: int = 1 for _ in range(1, n): print(_) last, next = next, last + next return next if __name__ == '__main__': sys.stdout = open('temp.txt', 'a') print(fib5(10)) sys.stdout.close() ``` Теперь весь вывод попадает в файл 'temp.txt' Как полностью отключить вывод print ``` import sys class FileFaker: def write(self, string): pass def flush(self): pass sys.stdout = FileFaker() ```