2
我有一個大腳本設計來運行一個任務,一次。但是我有一個init腳本,它使用start-stop-daemon在任何時候殺死腳本。該腳本結束很好,但子流程命令運行直到它完成。我懷疑它可能只是一個問題,我如何試圖做全局變量。或者,我使用communicate與子進程。無論如何這裏的代碼相關的東西:蟒蛇殺子進程通信退出
import subprocess
import os
import signal
pro = ''
def sigHandler(signum, frame):
global pro
os.killpg(pro.pid, signal.SIGTERM)
sys.exit()
def run(data):
#I found an example using preexec_fn somewhere on stackoverflow. Cant
#remember if they were using .communicate() or not
global pro
pro = subprocess.Popen(command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False, preexec_fn = os.setsid).communicate()
return(1)
if __name__ == '__main__':
signal.signal(signal.SIGTERM, sigHandler)
while True:
run(relevantData)
看來,直到子進程已經完成了可變親沒有得到數據。所以當sigterm在子進程運行時運行時,不會有pid數據被殺死。這可能是communic()的一個特性。我想用wait()來代替,但是我用命令的輸出來解決緩衝區問題。 – ryan461