Как сделать так, чтобы вывод оболочки перенаправлял (>) при записи скрипта? - PullRequest
10 голосов
/ 02 мая 2010

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

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

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

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

Ответы [ 3 ]

15 голосов
/ 02 мая 2010

Вам нужно сбросить вывод sys.stdout.flush() (или что-л.), Если вы хотите увидеть его немедленно. Смотри это

7 голосов
/ 02 мая 2010

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

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

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

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

1 голос
/ 02 мая 2010

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

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

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

tail -f ~/public_html/results.txt

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...