如何使用日志记录模块在日志文件中记录错误/异常?

时间:2018-11-15 17:12:28

标签: python logging logfile

我正在尝试使用记录器调试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 :(得分:1)

终端上显示的是process 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"
>>>