Ловить коды ошибок процессов Python вне их в Linux?

220
Pythoneer

Я использую код Python, а не мой, который работает в течение нескольких дней или даже недель. У него могут остаться некоторые ошибки, поэтому он может время от времени падать. Но я не хочу проверять это каждые пару часов. Я знаю, что процесс (ы) Python делают коды возврата! = 0, если что-то происходит.

Но возможно ли это уловить извне? Если да, я хотел бы сделать это, поэтому я могу отправить электронное письмо самому себе, если что-то случится.

Спасибо.

0

1 ответ на вопрос

0
AFH

Все, что вам нужно, это проверить код возврата, используя что-то вроде: -

if PythonScript then # Actions on success ... else # Actions on failure err=$? ... fi 

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

Если PythonScriptон исполняемый и имеет первую строку #!/usr/bin/python(или путь к используемой версии Python), то он может быть вызван напрямую; в противном случае ему должна предшествовать pythonсоответствующая версия.

Не могли бы вы уточнить? Если я запускаю a.py, что занимает много лет, я запускаю затем b.py, который может проверить, возвращает ли a.py сообщения об ошибках? Потому что я не хочу возиться в a.py Pythoneer 5 лет назад 0
Ваш вопрос и комментарий неясны. Как вы передаете любую ошибку в `b.py`? В параметре запуска? в переменной окружения? в файле? Я не могу сформулировать свой ответ, пока вы не проработаете свой вопрос. Если вы всегда будете запускать `b.py`, то` if` в моем ответе не требуется: это может быть так же просто, как `a.py; b.py $? `, где` b.py` передается код завершения из `a.py` в его первом параметре. AFH 5 лет назад 0
Нет, это главное. Я запускаю screen, запускаю python a.py, а затем запускаю его. Это все, что я делаю. в случае сбоя a.py это будет видно на экране, потому что он будет печатать что-то вроде возвращенного 1 ... и я бы хотел как-то это уловить ... Pythoneer 5 лет назад 0
Я предположил, что `a.py` вызывает` sys.exit () `для возврата статуса завершения. Если этого не произойдет, у вас будет много трудностей при чтении строк из окна: хотя вы не хотите изменять `a.py`, это, вероятно, самый простой ответ. AFH 5 лет назад 0

Похожие вопросы