Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash正在等待python子进程_Python_Bash_Python 3.x_Subprocess - Fatal编程技术网

Bash正在等待python子进程

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") 不幸的

我有三个互相调用的脚本。它们是:

脚本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")
不幸的是,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
会出现在终端上