繁体   English   中英

如何在不知道哪里会发生错误的情况下将输出和错误记录到文件中

[英]How to log outputs and errors to file without knowing where errors will occur

我有一个在远程服务器上运行的长脚本,我想将所有输出以及错误消息记录到文件中。

  1. 我知道如何将所有终端输出(例如 print())记录到 a.txt 文件中:
# in script:
import sys sys.stdout = open('./myfile.txt', 'w')
# ... 
sys.stdout.close()

# in terminal:
python myscript.py > ./myfile.txt

这会将所有 print() 输出写入我想要的文件。 但它不会将错误消息写入文件以防万一失败。

  1. 我知道如何记录错误
import logging
try:
   # ...
except ZeroDivisionError as e:
   logging.error(e)  # ERROR:root:division by zero

链接到日志记录模块的所有解决方案的问题是,我需要知道错误将在哪里发生以将其包装在 logging.error() function 中。 但我并不总是知道我的错误会发生在哪里。

=>我如何(1)写入所有输出和(2)使我的脚本失败的错误文件?

您必须将 python 错误 output sys.stderr重定向到文件:

import sys

sys.stderr = open("errors.txt", "w")

我认为可以创建一个包含您要写入的所有日志的新文件。 配置看起来像这样:

import logging
logging.basicConfig(filename='std.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')

这将 output 记录消息到 std.log 文件

自己找到了答案:只需在终端中输入,并确保您在正确的目录中有一个 log.text 文件。 无需更改脚本。

python script.py &> ./log.txt

灵感来自这个问题: Redirect stdout and stderr to same file using Python

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM