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