如何记录Python崩溃?

14 投票
3 回答
21593 浏览
提问于 2025-04-17 17:18

我在树莓派上运行一个Python代码,这个代码应该是一直运行下去的。但是过了几个小时后,它就崩溃了。因为它是在远程机器上运行的,所以我看不到崩溃时的错误信息。

我该怎么把这个错误信息存到一个文件里,这样我就能知道问题出在哪里?在Linux系统中,这个过程是自动完成的吗?还是我需要写一个函数来在崩溃时导出错误信息?我该怎么做呢?

3 个回答

2

我自己尝试了很多方法,但都感觉怪怪的……直到我终于搞明白了!只需要在你的Python文件周围写上这段代码,一切就会正常运行!顺便说一下,我会把崩溃日志命名为CRASH-,后面跟上Python的时间(比如CRASH-1607012036.015824.txt)

try:
    <your program here>
except Exception as e:
    crash=["Error on line {}".format(sys.exc_info()[-1].tb_lineno),"\n",e]
    print(crash)
    timeX=str(time.time())
    with open("monstergame/crashlogs/CRASH-"+timeX+".txt","w") as crashLog:
        for i in crash:
            i=str(i)
            crashLog.write(i)

注意:这是Python 3的代码,不是Python 2

11

你可以有一个主函数,并在主函数崩溃时记录日志。

def main():
   ...
   raise ValueError("Crashed because I'm a bad exception")
   ...

if __name__ == "__main__":
   try:
      main()
   except Exception as e:
      logger.exception("main crashed. Error: %s", e)

这样做更好,特别是如果你使用像 logstash 这样的工具,想在你的界面上看到错误信息和发生的时间。

感谢 Eric 对这个答案的改进。

10

如果你想把输出结果存到一个文件里,可以这样启动这个过程:

python script.py >> /logdir/script.py.log 2>&1

撰写回答