给出以下代码:
try:
subprocess.Popen(ExternalProcess, stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=True).communicate()
except KeyboardInterrupt:
exit(0)
Run Code Online (Sandbox Code Playgroud)
如果在执行ExternalProcess(不是python脚本)期间按下Ctrl+ C命令,究竟发生了什么?
我是否可以确定100%在此范围内,如果我按下Ctrl+ C,即使它在执行期间发生,它也总会进入'除外' ExternalProcess?
或者它取决于外部流程如何处理它?
ber*_*eal 19
据我所知,一旦你分叉/执行一个进程,它就会继承父进程组.这意味着,SIGINT(将其结果Ctrl+C和原因KeyboardInterrupt)将被发送给孩子和父母.
这是一个例子:
档案a.py:
import subprocess
try:
subprocess.Popen("python b.py".split()).communicate()
except KeyboardInterrupt:
print "a.py got ctrl-c"
Run Code Online (Sandbox Code Playgroud)
文件 b.py
try:
while True: pass
except KeyboardInterrupt:
print "b.py got ctrl-c"
Run Code Online (Sandbox Code Playgroud)
现在你运行它并停止:
> python a.py
^Cb.py got ctrl-c
a.py got ctrl-c
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13985 次 |
| 最近记录: |