给出以下代码:
try:
subprocess.Popen(ExternalProcess, stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=True).communicate()
except KeyboardInterrupt:
exit(0)
Run Code Online (Sandbox Code Playgroud)
如果在执行ExternalProcess(不是python脚本)期间按下Ctrl+ C命令,究竟发生了什么?
我是否可以确定100%在此范围内,如果我按下Ctrl+ C,即使它在执行期间发生,它也总会进入'除外' ExternalProcess?
或者它取决于外部流程如何处理它?
我正在编写一个激活子进程的python程序(使用Popen).我正在读取子进程的stdout,进行一些过滤,并写入主进程的stdout.
当我杀死主进程(cntl-C)时,子进程继续运行.我如何杀死子进程?子进程很可能运行很长时间.
上下文:我一次只启动一个子进程,我正在过滤它的stdout.用户可能决定中断以尝试其他操作.
我是python的新手,我正在使用Windows,所以请保持温和.
subprocess.call当我得到键盘中断(ctrl-c)时,我需要停止使用Python 创建的进程
问题是p在完成执行之前没有分配给它的值
p = subprocess.call(cmd)
所以我不能os.kill用来杀死它.另外,shell=True因为原因无法使用.
我想做的是:
try:
p = subprocess.call(cmd)
except KeyboardInterrupt:
os.kill(p.pid,signal.SIGTERM)
sys.exit('exited after ctrl-c')
Run Code Online (Sandbox Code Playgroud)