Nohup 没有将日志写入输出文件

我使用以下命令在后台运行一个 python 脚本:

nohup ./cmd.py > cmd.log &

但是看起来 nohup 没有向日志文件写入任何内容。Log 被创建,但始终为空。在 python 脚本中,我使用 sys.stdout.write而不是 print来打印到标准输出。我做错什么了吗?

108453 次浏览

看起来您需要定期清除 stdout (例如 sys.stdout.flush())。在我的测试中,即使使用 print,Python 也不会自动这样做,直到程序退出。

您可以使用 -u标志运行 Python 以避免输出缓冲:

nohup python -u ./cmd.py > cmd.log &
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &

或者

nohup python -u ./cmd.py > cmd.log &

Https://docs.python.org/2/using/cmdline.html#cmdoption-u

  • 使用 -unohup为我工作。使用 -u将强制解除对 stdoutstderr流的缓冲。不会影响性病。一切都将保存在“ 不行”文件。像这样

    nohup python -u your_code.py &
    

    您也可以将它保存到您的目录中

    nohup python -u your_code.py > your_directory/nohup.out &
    
  • Also, you can use PYTHONUNBUFFERED. If you set it to a non-empty string it will work same as the -u option. For using this run below commands before running python code.

    export PYTHONUNBUFFERED=1
    

    或者

    export PYTHONUNBUFFERED=TRUE
    

P.S.- I will suggest using tools like cron-job to run things in the background and scheduled execution.

Python 3.3及以上版本有一个可以打印的刷新参数,这是唯一适合我的方法。

print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)

我遇到过类似的问题,但是没有与 Python 进程连接。我正在运行一个执行 nohup 的脚本,该脚本通过 cron 定期运行。

我通过以下方式解决了这个问题:

  1. 重定向 stdin、 stdout 和 stderr
  2. 确保通过 nohup 调用的脚本不会在后台运行其他任何东西

附注: 我的脚本是用运行在 RHEL 上的 ksh 编写的

我以下面的方式运行我的脚本,我没有任何问题:

nohup python my_script.py &> my_script.out &

与您的语法进行比较,看起来您只是在输入后遗漏了一个“ &”符号..。