Пытаясь как разработчик конвертировать из php в python. В настоящее время выполняется попытка отладки сценария Python, выполнение которого занимает около 45 минут. Еще не умер, когда бежал из командной строки. Умирает примерно половину времени при беге от хрон.
С помощью php я мог просто вернуться в окно, в котором он работал, проверить файл журнала на время его запуска и найти / исправить ошибки, если скрипт был запущен. Есть ли в Python нечто подобное?
питон Можно печатать журналы в файле, но это не то поведение, которое вы получаете из коробки. По умолчанию он печатает журналы с уровнем журнала, равным или превышающим WARNING на stderr:
import logging
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
Вот что происходит, когда вы запускаете этот скрипт:
$ python log.py
WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical
$ python log.py 2>/dev/null # does not print anything
$
Поэтому, если вы перенаправили stderr в файл в вашем задании cron, вы должны как минимум увидеть предупреждения и ошибки в этом файле. Если вы хотите легко войти непосредственно в файл, вы можете использовать logging.basicConfig
:
import logging
# print log in example.log instead of the console, and set the log level to DEBUG (by default, it is set to WARNING)
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
Теперь, если вы запустите его, у вас больше не будет ввода в консоли, но все должно быть в example.log
:
$ python log.py
$ cat example.log
DEBUG:root:debug
INFO:root:info
WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical
Вы найдете гораздо больше деталей и параметров конфигурации в вход на страницу HOWTO
Я считаю, что вы просите о двух разных вещах. PHP обычно работает как приложение на стороне сервера, поэтому имеет специальные конструкции для регистрации ошибок. Python может работать с любым типом приложений и запускать несколько экземпляров одновременно, поэтому то, что вы спрашиваете, не имеет смысла в этом контексте. Тем не менее, вы все еще можете выполнить то, что вы хотите.
Хотя вы можете направить вывод в stderr непосредственно из задания cron «> /path/to/log.txt», для более детальной информации используйте pythons протоколирование Библиотекарь — часть стандартной библиотеки. Лично я предпочитаю pygogo — это обеспечивает хорошую обертку вокруг библиотеки регистрации.
Так…
Я делаю это регулярно, работает как шарм.