Bash ждет подпроцесс Python

2

У меня есть три сценария, которые называют друг друга. Это следующие:

script1.sh:

s='./script2.py';
echo "DONE";

script2.py:

#!/usr/bin/env python3
import subprocess

subprocess.Popen(["./script3.py"])
print ("Exit script2")

script3.py:

#!/usr/bin/env python3
import time

time.sleep(20)
print ("child OK")

К сожалению, скрипт1.sh является сторонним программным обеспечением, и я не могу его изменить.

Script2.py запустит script3.py в фоновом режиме и выйдет. Он хорошо работает из командной строки. Но когда сценарий1.sh вызывает скрипт2.py, который ждет скрипта3.py. Итак, скрипт1.sh замерзает. Как я могу избежать этого?

Теги:
python-3.x
subprocess

1 ответ

3
Лучший ответ

Проблема в том, что script1.sh - это script1.sh stdout, и python не закончил запись в stdout до завершения script3.py.

Одно из решений заключается в отправке stdout script3.py другое место. Например, это позволяет script1.sh выполнить быстро:

$ cat script2.py 
#!/usr/bin/env python3
import subprocess
import sys

subprocess.Popen(["./script3.py"], stdout=sys.stderr)
print ("Exit script2")

С этим изменением, script1.sh выйдет быстро, и намного позже на нем появится child OK.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню