По умолчанию stdout является буферизованной строкой при переходе к терминалу, но использует больший буфер при перенаправлении, следовательно, tee и терминал не увидят вывод позже.
Для способов получения скрипта.py, чтобы не буферизовать вывод, смотрите ответы на этот вопрос Отключите буферизацию вывода
Например, если script.py равен:
#!/usr/bin/python3
import time
for i in range(5):
print('This is line', i, flush=True)
time.sleep(1)
Running ./script.py | tee File.txt
выведет на печатькаждая строка в терминале по мере выполнения строки - с интервалом в одну секунду.
Если вы удалите flush=True
, тогда весь вывод буферизуется, и ничего не печатается, пока сценарий не завершится через 5 секунд, когда все будет напечатано.
2>&1
перенаправляет stderr на стандартный вывод, поэтому вам может потребоваться применить такую же буферизацию как к стандартному, так и к стандартному выводу.