我开始在服务器上运行我的python程序:
nohup python program.py &
程序包含一个循环,它运行一个函数并每次打印输出:
for i in s:
print f(i)
我昨天启动了该程序,但我的nohup.out
仍然是空的。我搜索了互联网,似乎python缓冲了输出。我不想停下来重新运行我的程序。有没有办法将输出刷新到nohup.out
现在?
答案 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无缓冲。