Python 键盘中断和os.system vs SUBSPROCESS.call

Python 键盘中断和os.system vs SUBSPROCESS.call,python,operating-system,subprocess,Python,Operating System,Subprocess,我正在用python编写一个小型CLI(借助cmd模块)。目前,我正在尝试将所有出现的os.system替换为subprocess.call 我面临的问题是,如果我使用os.system运行外部脚本,在我点击CTRL-C之后,只有子shell终止(我回到CLI)。当我使用subprocess.call运行相同的脚本并点击CTRL-C时,脚本和CLI都会终止执行 有没有一种方法可以通过子进程调用来模拟操作系统的行为?您可以通过异常处理程序捕获Python中的键盘中断: try: retco

我正在用python编写一个小型CLI(借助cmd模块)。目前,我正在尝试将所有出现的
os.system
替换为
subprocess.call

我面临的问题是,如果我使用
os.system
运行外部脚本,在我点击CTRL-C之后,只有子shell终止(我回到CLI)。当我使用
subprocess.call运行相同的脚本并点击CTRL-C时,脚本和CLI都会终止执行


有没有一种方法可以通过
子进程调用来模拟操作系统的行为?

您可以通过异常处理程序捕获Python中的键盘中断:

try:
    retcode = subprocess.call(args)
except KeyboardInterrupt:
    pass # ignore CTRL-C

我回滚了您上次的编辑,因为它与我所做的标题更改冲突,但由于我发布了与下面的答案相同的解决方案,我想您现在知道该部分的答案了:-P(很抱歉编辑冲突)。是否有可能将键盘中断转发到子进程?因为子流程可能要关闭一些打开的资源。@white_gecko:您可以访问子流程,是的。发送一个。因此,在这种情况下,我必须使用
Popen
实例而不是
call()
,对吗?@white\u gecko yes;注意,调用只是包装Popen的一种方便方法;如果需要复制该行为,请参阅。