我正在使用tempfile和子进程在Python中执行bash脚本,如下所示:
with tempfile.NamedTemporaryFile() as scriptfile:
scriptfile.write(teststr)
scriptfile.flush()
subprocess.call(['/bin/bash', scriptfile.name])
这里,teststr中包含整个bash脚本。
我的问题是,一旦它开始执行,它就不会捕获像Ctrl+c
和ctrl+z
这样的键盘中断。
一旦开始,是否会中断脚本的执行?
答案 0 :(得分:1)
我认为问题是Python父进程从SIGINT
接收Ctrl+C
并退出未处理的异常,但是子进程忽略信号并继续运行。这是我能够重现的唯一场景。实际问题可能有所不同使用SIGKILL
显式捕获异常并终止子进程可能有效。
而不是subprocess.call
:
proc = subprocess.Popen(['/bin/bash', scriptfile.name])
try:
proc.wait()
except:
proc.kill()
raise