【问题标题】:Bash is waiting for a python subprocessBash 正在等待一个 python 子进程
【发布时间】:2016-07-20 02:09:13
【问题描述】:

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

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 调用 script2.py 时,就是在等待 script3.py。所以,script1.sh 冻结了。如何避免?

【问题讨论】:

    标签: python bash python-3.x subprocess


    【解决方案1】:

    问题是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 出现在终端上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多