![](/img/trans.png)
[英]Python subprocess.check_call of the bash script is not waiting for subprocesses to finish
[英]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
正在捕獲stdout,而python在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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.