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

问题描述 投票:0回答:1

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

/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程序中对输入变量进行硬编码,然后使用.NET技术。

nohup python -u ./train_LONG.py &

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

nohup ./train_LONG.py -u &

python linux terminal background nohup
1个回答
1
投票

你弄错了错误信息的意思。它与标准输入有关,而不是命令行参数。

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

nohup yourprogram <file &

或用here文件

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 &

0
投票

Nohup 不接受来自stdin的输入。在nohup中运行时,最好的选择是通过命令行参数来获取输入,使用的库包括 argparse. 还有其他的选择,比如使用网络进行输入,或者使用其他的实用工具,如 屏风但是,如果你的工作是在后台运行的应用程序,命令行参数通常更容易处理。


0
投票

对我来说,一个可行的解决方案如下。

  1. 建立一个脚本 do_script
  2. 交稿 nohup /home/workspace/do_script &

哪儿 do_script

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

上文步骤1是决定性的;它是为一项建议而提出的。不同应用 此外,在这项工作的开始,我在日志文件中没有看到任何输出。这个博客 请注意,-u标志有助于避免输出缓冲.因此,该应用程序可以在工作空间断开时生存,并在日志文件中收集所有相关的输出。

© www.soinside.com 2019 - 2024. All rights reserved.