Скрипт Python зависает при вызове скрипта bash - PullRequest
0 голосов
/ 04 октября 2019

У меня есть приложение фляги, которое вызывает функцию python my_funct.py, которая имеет следующий код:

container_logs = 'bash train.sh'
subprocess.call([container_logs],shell=True)
return result

Проблема в том, что my_funct.py зависает в строке подпроцесса:

subprocess.call([container_logs],shell=True)

В результате мое приложение фляги тоже зависает, ожидая ответа:

resp = requests.post(url,data=json.dumps(data), headers=headers )

Я знаю, что процесс, вызванный из "bash train.sh", завершился, так как я получил выходной файл, но скрипт продолжает ждать бесконечно

EDIT

Скрипт длится около 10 минут, когда я вызываю bash train.sh прямо из терминала.

enter image description here

В конце я добавляю в скрипт следующее:

echo 'done'

exit 0

echo 'has not exit'

В терминале я получаю сообщение "Готово"«печать, а не« не имеет выхода », оттуда я предполагаю, что сценарий заканчивает: enter image description here

enter image description here

Но проблема со стороны API остается.

1 Ответ

1 голос
/ 05 октября 2019

Фактическая проблема , вероятно в том, как вы вызываете сценарий, но мы не можем определить, не увидев сценарий.

Между тем, это, безусловно, ошибка:

subprocess.call(['bash train.sh'],shell=True)

Требуется либо

subprocess.call(['bash', 'train.sh'])  # shell=False

, либо

subprocess.call('bash train.sh',shell=True)

Невозможно объединить список с shell=True, поскольку оболочка ожидает строку, а несписок, как последовательность команд для запуска.

Если ваш скрипт исполняемый и имеет действительный shebang, вы на самом деле хотите

subprocess.call(['train.sh'])

Bash не может установить переменную Python result без взаимодействия с вызывающей программой Python.

Если ваш сценарий пытается прочитать из стандартного ввода, возможно, попробуйте

subprocess.call(['train.sh'], stdin=subprocess.DEVNULL)

Если ваш сценарий пытается записать что-то в стандартный вывод, возможно, попробуйте

output = subprocess.check_output(['train.sh'])

Это все только умозрительные;Ваш вопрос, вероятно, должен быть закрыт как неясный, но, по крайней мере, это должно дать вам нечто большее, чтобы обновить ваш вопрос и / или ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...