Как сделать перенаправление вывода оболочки (>), когда скрипт все еще запущен?

Я написал короткий сценарий, который никогда не заканчивается. Этот скрипт непрерывно генерирует выходные данные, которые я должен проверять время от времени. Я запускаю его на лабораторном компьютере через SSH и перенаправляю вывод в файл в моей папке public_html на этом компьютере.

python script.py > ~/public_html/results.txt 

Однако, когда я обновляю адрес, результаты не отображаются сразу. Результаты появляются, когда я заканчиваю программу, но, как я уже сказал, она не останавливается сама по себе. Является ли это перенаправление ( > ) ленивым с записью? Есть ли способ непрерывно (или с интервалом) обновлять результаты в файле?

Или веб-сервер не обновляет файл, пока он еще написан?

Вам нужно очистить выходной sys.stdout.flush() (или smth), если вы хотите увидеть его немедленно. См. Это

stdout буферизуется, если не подключен к терминалу.

Вы можете изменить эту политику на строку-буферизацию через stdbuf

 stdbuf -oL python script.py > ~/public_html/results.txt 

Таким образом, вам не нужно скрывать свой скрипт Python и поддерживать его в эффективном режиме, если буферизация строк не требуется.

Я подозреваю, что файл постоянно записывается, но веб-сервер сообщает о измененной дате файла как времени его открытия и, таким образом, сообщает, что никаких изменений в файле не произошло, и результат кэшируется (либо в веб-сервер или клиент).

Сначала я попробую принудительную перезагрузку (Ctrl + F5 или Ctrl + Shift + R или Shift + <reload_button>) и посмотрим, поможет ли это. Если это не так, вы можете попробовать что-то другое.

В отдельной оболочке на сервере выполните

 tail -f ~/public_html/results.txt 

Хвост печатает последние n строк файла (где n по умолчанию – 10), но параметр -f контролирует файл и продолжает сообщать о выходе по мере роста файла. Это, по крайней мере, даст вам уверенность в том, что файл записывается постепенно.

Надеюсь, это поможет.