Windows Python解释器在Ctrl C上退出

Windows Python解释器在Ctrl C上退出,第1张

概述对于我使用过的大多数Python解释器,Ctrl C将导致解释器打印出“KeyboardInterrupt”并保持打开状态.但是,在最近在新计算机上安装时,Ctrl C导致解释器退出,这是不合需要的.>设置signal.SIGINT处理程序仍然退出.>没有可以调整行为的启动脚本.> raise KeyboardInterrupt不会退出解释

对于我使用过的大多数Python解释器,Ctrl C将导致解释器打印出“KeyboardInterrupt”并保持打开状态.但是,在最近在新计算机上安装时,Ctrl C导致解释器退出,这是不合需要的.

>设置signal.SIGINT处理程序仍然退出.
>没有可以调整行为的启动脚本.
> raise KeyboardInterrupt不会退出解释器.
>在Ctrl C上没有发出文本.在Ctrl Break中,^ C在退出之前发出.

如果我在下面的代码段中的暂停期间按Ctrl C,则解释器保持打开状态.

import timetry:    time.sleep(100)except KeyboardInterrupt:    pass

环境:windows 10上的Python 3.4.3最佳答案在windows 8及更高版本上运行3.6之前的Python版本的shell提示符处,Ctrl C处理已中断.对于input和raw_input,它也会被破坏,你将获得一个EOFError而不是KeyboardInterrupt.您可以通过安装和启用win_unicode_console或升级到3.6来解决此问题

问题是Python从控制台读取的旧代码依赖于Readfile,当Ctrl C中断读取时,将最后一个错误设置为ERROR_OPERATION_ABORTED(995).在windows 8中,Microsoft完全重写了客户端进程如何与控制台通信.在这种情况下,他们打破了有关Readfile行为的文档合同.没有错误,Python认为中止读取是0字节的成功读取.通常这表示文件结束(EOF),因此REPL只是退出,就像用户键入了Ctrl Z,Enter一样.

Readfile是来自任何file句柄的通用读取.还有一个专门的ReadConsole功能.这个仍然表现正常,这就是为什么win_unicode_console和3.6没有这个问题.他们调用ReadConsoleW来解决在控制台中使用全范围Unicode的单独问题,这恰好也解决了Ctrl C问题.

仅供参考,您在屏幕上看到的^ C不是由控制台(conhost.exe)或Python编写的.它实际上是由cmd.exe shell设置的CTRL_BREAK_EVENT处理程序打印的.如果从PowerShell运行Python,则不应该看到使用Ctrl Break打印的内容.

总结

以上是内存溢出为你收集整理的Windows Python解释器在Ctrl C上退出全部内容,希望文章能够帮你解决Windows Python解释器在Ctrl C上退出所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存