2013-06-18 64 views
4

我运行在Linux服务器上一个python脚本nohup的那样:nohup和python没有错误信息?

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

它的工作原理和脚本写入日志文件,但问题是,蟒蛇错误消息/似乎抛出的异常并没有得到书面到日志文件中。我怎么能做到这一点?

这与stderr有什么关系? (但它说:“nohup:当我启动脚本时将stderr重定向到标准输出”)。

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

编辑: 它可能与冲洗有关吗?由于我自己的打印文件使用flush,但是可能python错误不会在脚本中止后不会显示在文件中?

回答

7

我找到了原因。这真的是缓冲问题(请参阅我上面的编辑)。 :)

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

使用python -u参数它的工作原理。它禁用缓冲。

现在我可以去缺陷寻找...

+0

我使用http://unix.stackexchange.com/questions/45913/is-there-a-way-to-redirect-nohup-output-to-a-- log-file-other-than-nohup-out来分割标准输出和stderr,但我想这是行不通的,因为你的同样的问题与无缓冲的标志https://docs.python.org/2/using/cmdline.html#cmdoption-u – Cyrille

+0

这种解决方案并不总是工作, [见这里](http://stackoverflow.com/questions/34753765/nohup-and-python-u-it-still-doesnt-log-data-in-realtime)。 – Basj

1

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

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

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

+0

现在它说:“nohup的:追加输出‘的nohup.out’”和mylog.log并不习惯。错误仍然不显示。 – horace