在执行Python脚本期间捕获键盘中断

时间:2013-08-08 11:32:39

标签: python bash keyboard-events

我正在使用tempfile和子进程在Python中执行bash脚本,如下所示:

 with tempfile.NamedTemporaryFile() as scriptfile:
                scriptfile.write(teststr)
                scriptfile.flush()
                subprocess.call(['/bin/bash', scriptfile.name])

这里,teststr中包含整个bash脚本。 我的问题是,一旦它开始执行,它就不会捕获像Ctrl+cctrl+z这样的键盘中断。

一旦开始,是否会中断脚本的执行?

1 个答案:

答案 0 :(得分:1)

我认为问题是Python父进程从SIGINT接收Ctrl+C并退出未处理的异常,但是子进程忽略信号并继续运行。这是我能够重现的唯一场景。实际问题可能有所不同使用SIGKILL显式捕获异常并终止子进程可能有效。

而不是subprocess.call

proc = subprocess.Popen(['/bin/bash', scriptfile.name])
try:
    proc.wait()
except:
    proc.kill()
    raise