Python:将ctrl-c传递给通过os.spawnvpe运行的进程

时间:2017-02-02 15:02:04

标签: python

在我的python脚本中,我有:

os.spawnvpe(os.P_WAIT, cmd[0], cmd, os.environ)

其中cmd类似于['mail', '-b', emails,...],它允许我以交互方式运行mail并在邮件完成后返回到python脚本。

唯一的问题是当我按下Ctrl-C时。似乎" mail和python脚本都对它作出反应" (*),而我更喜欢在mail运行时,只有mail应该响应,并且python不应该引发任何异常。是否有可能实现它?

(*)控制台上发生的事情是:

^C
(Interrupt -- one more to kill letter)
Traceback (most recent call last):
  File "./tutster.py", line 104, in <module>
    cmd(cmd_run)
  File "./tutster.py", line 85, in cmd
    code = os.spawnvpe(os.P_WAIT, cmd[0], cmd, os.environ)
  File "/usr/lib/python3.4/os.py", line 868, in spawnvpe
    return _spawnvef(mode, file, args, env, execvpe)
  File "/usr/lib/python3.4/os.py", line 819, in _spawnvef
    wpid, sts = waitpid(pid, 0)
KeyboardInterrupt

然后邮件实际上被发送(这已经很糟糕,因为意图是杀死它),但是正文是空的,内容作为带有bin扩展名的附件发送。

1 个答案:

答案 0 :(得分:0)

用try / except语句包装它:

try:
    os.spawnvpe(os.P_WAIT, cmd[0], cmd, os.environ)
except KeyboardInterrupt:
    pass