Как регистрировать ошибки / исключения в файле журнала с помощью модуля регистрации? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь отладить скрипт на Python с помощью логгера. Он открывает другой скрипт на Python и проверяет, запущен он или нет. Если нет, то он перезапускает этот скрипт.

Мой скрипт:

while True:
    print("Restart")
    logger.info("Restart")

    try:
        p = subprocess.Popen(["python", OPEN_FILE]).wait()
    except:
        logger.exception("Error opening script")
    print("Exit")
    logger.error("Exit")
    time.sleep(10)
    if p != 0:
        continue
    else:
        break

Если файл не найден, он выводит ошибку на терминал:

pi@raspberrypi:~/Desktop/MODBUS_TCP $ sudo python py_restart_script.py
Restart
python: can't open
file'/home/pi/Desktop/MODBUS_TCP/API_Modbus_TCP_Server3.py': [Errno 2] No
such file or directory
Exit

Но этой ошибки нет в файле журнала:

2018-11-15 22:30:16,269 - INFO - Restart
2018-11-15 22:30:16,325 - ERROR - Exit

Как записать ту же ошибку, отображаемую в терминале, в файл журнала?

1 Ответ

0 голосов
/ 15 ноября 2018

В терминале печатается вывод процесса stderr.Вы можете получить его в своем скрипте Python и распечатать в файле журнала

>>> import subprocess
>>> p = subprocess.Popen(["python", "foobar"], stderr=subprocess.PIPE)
>>> ret = p.wait()
>>> ret # this holds the `subprocess` return code. ret != 0 indicates an error
2
>>> (_, stderr) = p.communicate()
>>> stderr
"python: can't open file 'foobar': [Errno 2] No such file or directory\n"
>>> 
...