1

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

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

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

脚本一旦开始执行,是否有任何中断?

4

1 回答 1

1

我认为问题在于 Python 父进程从未处理的异常接收SIGINTCtrl+C退出,但子进程忽略信号并继续运行。这是我能够重现的唯一场景。实际问题可能不同。捕获异常并显式地杀死子进程SIGKILL可能会起作用。

而不是subprocess.call

proc = subprocess.Popen(['/bin/bash', scriptfile.name])
try:
    proc.wait()
except:
    proc.kill()
    raise
于 2013-08-08T12:06:44.867 回答