有没有办法为运行的python程序解除nohup?

时间:2016-02-01 00:58:15

标签: python linux output buffer nohup

我开始在服务器上运行我的python程序:

nohup python program.py &

程序包含一个循环,它运行一个函数并每次打印输出:

for i in s:
    print f(i)

我昨天启动了该程序,但我的nohup.out仍然是空的。我搜索了互联网,似乎python缓冲了输出。我不想停下来重新运行我的程序。有没有办法将输出刷新到nohup.out现在?

2 个答案:

答案 0 :(得分:2)

不容易或不可靠。我可以描述可能工作的东西,但我从未在Python中测试它,它有一些假设。

假设Python正在使用libc stdio缓冲区,您可以使用gdb附加到正在运行的Python解释器,并使用gdb在stdout上调用fflush。

请注意,这可能会导致正在运行的程序崩溃。

首先找到python程序的PID。

其次,使用GDB附加到它:gdb --pid [PID from first step]

第三,在GDB类型call fflush(stdout)

然后输入detach,然后输入q以退出GDB。

不保证。

答案 1 :(得分:1)

您可以使用stdbuf,无缓冲的STDOUT:

stdbuf -o0 nohup python program.py &

线路缓冲STDOUT:

stdbuf -oL nohup python program.py &

或者更好地使用-u选项python

nohup python -u program.py &

或者在程序中使用sys.stdout.flush(()来刷新STDOUT以使STDOUT无缓冲。