Bash正在等待python子进程
我有三个互相调用的脚本。它们是: 脚本1.sh:Bash正在等待python子进程,python,bash,python-3.x,subprocess,Python,Bash,Python 3.x,Subprocess,我有三个互相调用的脚本。它们是: 脚本1.sh: s=`./script2.py`; echo "DONE"; 脚本2.py: #!/usr/bin/env python3 import subprocess subprocess.Popen(["./script3.py"]) print ("Exit script2") 脚本3.py: #!/usr/bin/env python3 import time time.sleep(20) print ("child OK") 不幸的
s=`./script2.py`;
echo "DONE";
脚本2.py:
#!/usr/bin/env python3
import subprocess
subprocess.Popen(["./script3.py"])
print ("Exit script2")
脚本3.py:
#!/usr/bin/env python3
import time
time.sleep(20)
print ("child OK")
不幸的是,script1.sh是一个第三方软件,我不能修改它
script2.py在后台启动script3.py并退出。它在命令行中运行良好。但是当script1.sh调用正在等待script3.py的script2.py时。所以,script1.sh已经冻结了。如何避免它?问题是
script1.sh
正在捕获stdout,而python在script3.py
完成之前尚未完成对stdout的写入
一种解决方案是将script3.py的stdout发送到其他地方。例如,这允许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
会出现在终端上