nohup: игнорирование ввода, но моя python программа требует ввода - PullRequest
0 голосов
/ 24 апреля 2020

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 &

Ответы [ 3 ]

1 голос
/ 24 апреля 2020

Вы ошибаетесь в том, что означает сообщение об ошибке. Он относится к стандартному вводу, а не к аргументам командной строки.

Для записи, чтобы запустить процесс, который должен прочитать стандартный ввод с помощью 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 &
0 голосов
/ 24 апреля 2020

Решение, которое работает для меня, выглядит следующим образом:

  1. Построить скрипт do_script
  2. отправить скрипт nohup /home/workspace/do_script &

где do_script is

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

Шаг # 1 выше был решающим; это было предложено для другого применения с аналогичными требованиями. Более того, в начале этой работы я не видел выходных данных в файле журнала: этот блог дал понять, что флаг -u помогает избежать буферизации вывода. В результате приложение выживает при отключении рабочей области и собирает все соответствующие выходные данные в файле журнала

0 голосов
/ 24 апреля 2020

Nohup не принимает ввод от стандартного ввода. Наилучший вариант для передачи входных данных при запуске в nohup - это получение входных данных через аргументы командной строки с использованием таких библиотек, как argparse . Существуют альтернативы, такие как использование сети для ввода данных или использование других утилит, таких как screen , но с аргументами командной строки обычно проще работать, если вы работаете с приложениями, работающими в фоновом режиме.

...