繁体   English   中英

python kill子进程在退出时进行通信

[英]python kill subprocess communicate on exit

Ive有一个大型脚本,旨在一次运行一个任务。 但是我有一个初始化脚本,该脚本在需要的任何时候都使用start-stop-daemon杀死该脚本。 该脚本结束得很好,但是subprocess命令一直运行到完成为止。 我怀疑这可能只是Im如何尝试执行全局变量的问题。 或者那个Im使用.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 )

朋友帮我弄清楚了。 就像我在评论中说的那样,在执行命令时并没有填充pro。 因此,我不得不将代码更改为此:

pro = subprocess.Popen( command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False, preexec_fn = os.setsid )
pro.communicate()

然后它起作用了:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM