簡體   English   中英

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 &

您誤解了錯誤消息的含義。 它涉及標准輸入,而不是命令行 arguments。

作為記錄,要運行需要使用nohup讀取標准輸入的進程,請添加重定向。

nohup yourprogram <file &

或使用此處文檔

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

或撥打 pipe

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

Nohup不接受來自標准輸入的輸入。 在 nohup 中運行時傳遞輸入的最佳選擇是使用argparse等庫通過命令行 arguments 獲取輸入。 有一些替代方案,例如 using.network 用於輸入或使用其他實用程序(例如screen ),但如果您正在使用在后台運行的應用程序,則命令行 arguments 通常更容易使用。

對我有用的解決方案如下:

  1. 構建腳本do_script
  2. 提交腳本nohup /home/workspace/do_script &

do_script在哪里

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

上面的第 1 步是決定性的; 它被提議用於具有類似要求的不同應用程序 此外,在這項工作開始時,我在日志文件中沒有看到 output:這篇博客讓我意識到 -u 標志有助於避免 output 緩沖。 結果,應用程序在工作區斷開連接后仍然存在,並在日志文件中收集所有相關輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM