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



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

  1. 我知道如何将所有终端输出(例如print(((记录到.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((函数中。但我并不总是知道我的错误会发生在哪里。

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

您必须将python错误输出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')

这将把日志记录消息输出到std.log文件

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

python script.py &> ./log.txt

受此问题启发:使用Python 将stdout和stderr重定向到同一文件

最新更新