【问题标题】:no error messages with nohup and python?nohup 和 python 没有错误消息?
【发布时间】:2013-06-14 08:16:54
【问题描述】:

我使用 nohup 在 linux 服务器上运行 python 脚本:

nohup python3 ./myscript.py > ./mylog.log &

它可以工作并且脚本会写入日志文件,但问题是 python 错误消息/抛出的异常似乎没有写入日志文件。我怎样才能做到这一点?

这与标准错误有关吗? (但是当我启动脚本时它说:“nohup:将标准错误重定向到标准输出”。)

这是一个长时间运行的脚本,一段时间后,有时脚本会因为某些问题而停止工作,并且缺少错误消息,我不知道为什么。问题总是在几天后发生,所以调试起来真的很痛苦。

编辑: 会不会跟flush有关系?由于我自己的打印使用了flush,但也许python错误没有,所以一旦脚本中止它们就不会出现在文件中?

【问题讨论】:

    标签: python debugging exception stderr nohup


    【解决方案1】:

    您只是重定向标准输出。错误消息在 stderr 上给出。像这样重新运行您的脚本:

    nohup python3 ./myscript.py &> ./mylog.log &
    

    &> 将所有输出(stdout 和 stderr)重定向到您的日志文件。

    【讨论】:

    • 现在它说:“nohup:将输出附加到 'nohup.out'”并且 mylog.log 没有被使用。错误仍然没有出现。
    【解决方案2】:

    我找到了原因。这确实是缓冲问题(见我上面的编辑)。 :)

    nohup python3 -u ./myscript.py > ./mylog.log &
    

    使用 python -u 参数它可以工作。它禁用缓冲。

    现在我可以去寻找错误了...

    【讨论】:

    【解决方案3】:

    使用 nohup,除非您专门将错误日志重定向到第二个文件,否则不会记录错误,如下所示

    nohup python myscript.py > out.log 2> err.log
    

    您还可以将日志和 error.log 重定向到相同的文件

    nohup python myscript.py > out.log2>&1
    

    在写入日志之前,Python 缓存到缓冲区中。要获取实时日志,请使用 -u 标志“无缓冲”。

    nohup python -u myscript.py > out.log2>&1
    

    要在后台运行并重新捕获提示,请在末尾添加&

    nohup python -u myscript.py > out.log2>&1 &
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2020-01-26
      相关资源
      最近更新 更多