Сделать принудительный вывод скрипта Python в файл .txt после принудительного выхода - PullRequest
0 голосов
/ 29 мая 2018

У меня есть скрипт Python, работающий на сервере через SSH, с помощью следующей команды:

nohup python3 python_script.py >> output.txt

Он работал очень долго и(вероятно) создал полезный вывод, поэтому я хочу заставить его прекратить сейчас.Как мне сделать так, чтобы он записал вывод, который у него есть, в файл output.txt?

Файл был создан автоматически, когда я запустил скрипт, но его размер равен нулю (в нем ничего не написанодо сих пор).

1 Ответ

0 голосов
/ 29 мая 2018

Как сказал Роберт в своем комментарии, убедитесь, что вывод, который вы ожидаете получить в файл, фактически делает его там, а не stderr.Если процесс уже запущен и долгое время без ответа или записи в выходной файл, я думаю, что есть 3 варианта:

  1. Он генерирует аут, но он не идет туда, где вы находитесьожидающий (ответ Робертса)
  2. Он генерирует выходные данные, но он буферизован и по какой-то причине еще не очищен
  3. Это не не генерирует никаких выходных данных

Вариант 3 прост: подождите дольше.Варианты 1 и 2 немного хитры.Если вы ожидаете значительного объема вывода из этого процесса, вы можете проверить потребление памяти экземпляром python, выполняющим ваш скрипт, и посмотреть, будет ли он расти или очень велик.Также вы можете использовать lsof, чтобы увидеть, открыт ли файл, и понять, что он с ним делает.

Если вы обнаружите, что ваш вывод выглядит как / dev / null, возьмитевзгляните на этот ответ о перенаправлении вывода для существующего процесса.

В маловероятном случае, если у вас есть огромный буфер, который не был очищен, вы можете попробовать использовать ps, чтобы получить PID, а затем использовать kill -STOP [PID], чтобы приостановить процесс и посмотреть, где вы можете получитьиспользуя GDB.

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

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