将信号处理委托给python中的子进程

时间:2014-07-24 14:12:27

标签: python signals subprocess control-c

如何从python脚本运行命令并委托给Ctrl+C之类的信号?

我的意思是当我跑步时:

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

我希望child_proc能够处理Ctrl+C

1 个答案:

答案 0 :(得分:1)

我猜你的问题是你希望子进程接收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仍会看到它。

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