11

我在树莓派中运行 python 代码。该代码应该永远存在。但是,几个小时后它崩溃了。由于它在远程机器上运行,我看不到它在崩溃期间给出的消息。

如何将此消息存储在文件中,以便查看问题所在?这是在linux中自主完成的吗?或者我应该编写一些函数来在崩溃期间导出错误。我怎样才能做到这一点?

4

3 回答 3

9

如果进程是这样​​启动的,您可以将输出存储在文件中:

python script.py >> /logdir/script.py.log 2>&1
于 2013-02-27T11:48:29.067 回答
8

如果主函数崩溃,您可以拥有一个主函数并登录

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 的东西并希望在您的 UI 上查看错误和时间,这会更好。

感谢Eric改进了答案

于 2015-10-22T16:00:12.120 回答
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

于 2020-12-03T16:14:58.500 回答