Использование Python 3.2, и следующий фрагмент кода:питон подпроцесс общаться зависания вызова сценарий оболочки
p = subprocess.Popen(['../start_server.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = p.communicate()
if out != None :
out = out.decode('utf-8')
if err != None :
err = err.decode('utf-8')
print('out ',out)
print('err ',err)
на некоторых сценариях оболочки, она работает просто отлично, и я получу свой выход. на других он просто висит. но в каждом случае сценарий оболочки запускается из командной строки без ошибок. Единственная общность, которую я вижу, - это (обычно) те, которые висят, имеют нулевой выход. Когда материал выходит из строя, проверяет запущенные процессы, и я вижу мой сценарий оболочки не указан в список и сценарий питона все еще работает
Что надежный способ вызвать скрипт и контроль всегда вернуться к моему питону программе?
Edit:
Использование труб Popen и такое не является обязательным требованием, единственным требованием является то, что управление возвращается в мой питон скрипт при выходе из сценария оболочки. Если сценарий оболочки никогда не возвращается в командную строку, мой сценарий python также никогда не вернется.
Так что, предполагая, что сценарий оболочки, который я вызываю, всегда возвращается в командную строку, как я могу получить контроль над моей программой python?
Если Theres лучший способ, что ивы перечисленные выше - пожалуйста, просветите меня
один дополнительный бит ив обнаружил, сценарии оболочки, которые «висит», кажется, заканчивается вызовом «поЬира» Ye они возвращаются к команде без проблем.
Это может быть что-то, что делает ваш скрипт (порождение другого процесса)? – jdigital
Мой фрагмент кода вызывает множество сценариев оболочки. Все они либо запускают новый процесс, либо останавливают существующий процесс. Некоторые работы, а некоторые нет. Но во всех случаях сценарии оболочки отлично работают из командной строки, не производят ошибок и делают то, что они должны. Я пытаюсь автоматизировать вызов существующих сценариев производства, поэтому внесение изменений в них не может быть и речи. – Jon
Я не предлагал, чтобы вы что-то меняли, я давал вам подсказку, что-то искать, что могло бы помочь вам определить причину проблемы. – jdigital