有没有办法为 运行 python 程序取消缓冲 nohup?

Is there a way to unbuffer nohup for a running python program?

我在服务器上启动了 运行 我的 python 程序:

nohup python program.py &

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

for i in s:
    print f(i)

我昨天启动了程序,但是我的nohup.out还是空的。我在网上搜索了一下,似乎 python 缓冲了输出。我不想停止并重新运行我的程序。现在有什么方法可以将输出刷新到 nohup.out 吗?

不容易或不可靠。我可以描述一些 可能 有效的东西,但我从未在 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。

无保证。

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

stdbuf -o0 nohup python program.py &

行缓冲标准输出:

stdbuf -oL nohup python program.py &

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

nohup python -u program.py &

或者在你的程序中使用sys.stdout.flush(()刷新标准输出,使标准输出无缓冲。