Ответ 1
Вам нужно очистить вывод sys.stdout.flush()
(или smth), если вы хотите его сразу увидеть. См. this
Я написал короткий script, который никогда не заканчивается. Этот script непрерывно генерирует выходные данные, которые я должен проверять время от времени. Я запускаю его на лабораторном компьютере через SSH и перенаправляю вывод в файл в моей папке public_html на этой машине.
python script.py > ~/public_html/results.txt
Однако, когда я обновляю адрес, результаты не отображаются. Результаты появляются, когда я заканчиваю программу, но, как я уже сказал, она не останавливается сама по себе. Является ли это перенаправление (>
) ленивым с записью? Есть ли способ непрерывно (или с интервалом) обновлять результаты в файле?
Или это веб-сервер, который не обновляет файл, пока он еще написан?
Вам нужно очистить вывод sys.stdout.flush()
(или smth), если вы хотите его сразу увидеть. См. this
stdout буферизуется, если не подключен к терминалу.
Вы можете изменить эту политику на буферизацию строки с помощью stdbuf
stdbuf -oL python script.py > ~/public_html/results.txt
Таким образом, вам не нужно скрывать свой Python script и поддерживать его в режиме ввода-вывода, если не требуется буферизация строк.
Я подозреваю, что файл постоянно записывается, но веб-сервер сообщает о модифицированной дате файла как времени его открытия и, таким образом, сообщает, что никаких изменений в файле не произошло, и результат кэшируется (либо на веб-сервере, либо на клиенте).
Сначала я попробую принудительную перезагрузку (Ctrl + F5 или Ctrl + Shift + R или Shift + <reload_button > ) и посмотрим, поможет ли это. Если это не так, вы можете попробовать что-то еще.
В отдельной оболочке на сервере сделайте
tail -f ~/public_html/results.txt
Хвост печатает последние n строк файла (где n по умолчанию - 10), но параметр -f контролирует файл и продолжает сообщать о выходе по мере роста файла. Это, по крайней мере, даст вам уверенность в том, что файл записывается постепенно.
Я надеюсь, что это поможет.