Операции 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()
```