在Ubuntu 10.04上,我有一个很长的Python程序,打印一堆输出; 我在“nohup”下运行。 然而,它一直等到最后把所有的文本放在nohup.out中。 当我在FreeBSD下运行类似的程序时,每一行都被发送到nohup.out。 有一个Ubuntu设置,我可以设置得到更快的输出?
是的,这与stdout在Linux上被默认缓冲的方式有关。 您需要在代码中显式运行setbuf()以覆盖此行为。
我的build议是避免nohup,如果你使用的是bash shell,它可以让你从shell解除关联命令
$ ( my_cmd > ~/output.log 2>&1 & )
对于当前正在运行的作业,您也可以使用disown来获得类似的效果。
由于你的程序是python,你可以用python -u运行它。 或者,您可能会发现非缓冲程序有用。