nohup:忽略输入,但我的 python 程序确实需要输入

nohup: ignoring input, but my python program DOES require input

train.py 是一个 python 程序,它使用 argparse 解析输入变量,并且应该 运行 在没有附加终端的后台,但总是忽略输入。我测试了以下选项:

/home/workspace# nohup /home/workspace/train.py vgg19 3000 1 cpu &

nohup /home/workspace/doit &

其中 doit 是包含

的脚本

/home/workspace/train.py vgg19 3000 1 cpu

所有结果:

home/workspace# nohup: ignoring input and appending output to 'nohup.out'

唯一可行的解​​决方法(但我的项目不能接受)是在 python 程序中硬编码输入变量并使用 :

nohup python -u ./train_LONG.py &

此外,这非常令人困惑,即使是以下命令也会导致输入被忽略:

nohup ./train_LONG.py -u &

Nohup does not take input from stdin. The best option for passing in inputs while running within nohup is getting input through command line arguments using libraries like argparse. There are alternatives like using network for input or using other utilities like screen,但如果您使用的是在后台运行的应用程序,则命令行参数通常更易于使用。

您误解了错误消息的含义。它与标准输入有关,与命令行参数无关。

郑重声明,对于 运行 需要使用 nohup 读取标准输入的进程,添加重定向。

nohup yourprogram <file &

或使用此处文档

nohup yourprogram <<\HERE &
first line of input
second line of input
etc
HERE

或用管道

nohup printf '%s\n' "first line of input" "second line of input" etc |
yourprogram &

对我有用的解决方案如下:

  1. 构建脚本do_script
  2. 提交脚本nohup /home/workspace/do_script &

其中 do_script

    #!/bin/bash 
    python -u /home/workspace/train.py vgg19  8000 15  cuda 

上面的第 1 步是决定性的;有人提议 具有类似的要求。 此外,在这项工作开始时,我在日志文件中没有看到任何输出:this blog 请注意 -u 标志有助于避免输出缓冲。 结果,应用程序在工作区断开连接后仍然存在,并在日志文件中收集所有相关输出