6

如何从 python 脚本运行命令并将信号委托给它Ctrl+C

我的意思是当我运行例如:

from subprocess import call
call(["child_proc"])

我想child_proc处理Ctrl+C

4

1 回答 1

2

我猜您的问题是您希望子进程接收 Ctrl-C 并且不让父 Python 进程终止?如果您的子进程为 Ctrl-C (SIGINT) 初始化了自己的信号处理程序,那么这可能会奏效:

import signal, subprocess

old_action = signal.signal(signal.SIGINT, signal.SIG_IGN)
subprocess.call(['less', '/etc/passwd'])
signal.signal(signal.SIGINT, old_action)         # restore original signal handler

现在您可以按 Ctrl-C(生成 SIGINT),Python 将忽略它但less仍会看到它。

但是,这仅在子级正确设置其信号处理程序时才有效(否则这些是从父级继承的)。

于 2014-07-24T14:41:38.223 回答