gpt4 book ai didi

python - 如何在 Curses 内引发键盘中断

转载 作者:行者123 更新时间:2023-12-01 05:27:03 24 4
gpt4 key购买 nike

在 Windows ( via this PDCurses ) 上使用 curses 模块,我尝试中断 KeyboardInterrupt 异常,但当我按 ctrl+ 时它不会引发c.

一些精炼代码:

from curses import wrapper
items = ['a', 'very', 'long', 'list', 'of', 'strings']

def main(screen):
for item in items:
screen.addstr(0, 0, item)
screen.getch()
screen.refresh()

wrapper(main)

items 列表非常长,现在我无法中途停止执行。我必须反复按键,直到到达终点。但愿我不会在 while True 的情况下尝试这个:!

当我按 ctrl+c 时,没有引发异常。它确实以 3 形式传递给我的 getch()。当getch收到3时,SOP是否要手动引发,或者是否有更合适的方法来避免吞噬KeyboardInterrupt

最佳答案

默认情况下curses使用raw模式,从文档中关闭中断/退出/挂起等

In raw mode, normal line buffering and processing of interrupt, quit, suspend, and flow control keys are turned off; characters are presented to curses input functions one by one

来自C的诅咒documentation :

The difference between these two functions (raw and cbreak) is in the way control characters like suspend (CTRL-Z), interrupt and quit (CTRL-C) are passed to the program. In the raw() mode these characters are directly passed to the program without generating a signal.

由于 python 在发送 SIGINT 时会引发 KeyboardInterrupt,因此不会引发该事件是预料之中的。您看到的 3确实代表一个中断。

由于这是由 C 库处理的事情,因此无法避免这种“吞噬”异常。不过,您可以使用 getch 的简单包装器来检查何时返回 3 并相应地引发错误。

关于python - 如何在 Curses 内引发键盘中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21123146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com