簡體   English   中英

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正在捕獲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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM