Bash 正在等待 python 子进程

Bash is waiting for a python subprocess

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

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")

很遗憾 script1.sh 是第三方软件,我无法修改它。

script2.py 在后台启动 script3.py 并退出。它在命令行中运行良好。但是当 script1.sh 调用正在等待 script3.py 的 script2.py 时。所以,script1.sh 冻结了。我怎样才能避免它?

问题是 script1.sh 正在捕获标准输出,而 python 在 script3.py 完成之前尚未完成对标准输出的写入。

一个解决方案是将 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 会出现在终端上。