Python诅咒令人困惑的键盘()SIGINT行为

时间:2018-02-16 19:25:27

标签: python curses

我有一段在Python 2.7中使用curses的代码。我能理解的是getch()给我的SIGINT值为-1。但我想更详细地了解以下行为:

案例#1 考虑一下这段代码:

myscreen = curses.initscr()

def end(sig,frame):
    myscreen.addstr(1,0,'sigint')
    c=myscreen.getch()
    myscreen.addstr(2,0,str(c))
    myscreen.getch()
    curses.endwin()
    sys.exit(0)

signal.signal(signal.SIGINT,end)
myscreen.addstr('waiting...')
myscreen.getch()
curses.endwin()

我得到的输出是:

waiting...
sigint #This I get after first SIGINT
-1 #This I get after second SIGINT

再次按键后,程序结束。所以它需要3次按键。

案例#2 请考虑以下代码:

myscreen = curses.initscr()
myscreen.keypad(1)

def end(sig,frame):
    myscreen.addstr(1,0,'sigint')
    c=myscreen.getch()
    myscreen.addstr(2,0,str(c))
    myscreen.getch()
    curses.endwin()
    sys.exit(0)

signal.signal(signal.SIGINT,end)
myscreen.addstr('waiting...')
myscreen.getch()
curses.endwin()

输出是:

waiting...
sigint
-1 #This I get after first SIGINT

另一次按键后,程序结束。这只占用了2个输入,并且在第一个SIGINT之后我们输出了-1,这意味着getch()中的第一个end()自动得到-1的输入(这似乎是来自情况#1的SIGINT)。任何人都可以解释一下keypad()函数的存在吗?这是与keypad()处理转义字符的方式有关吗?

0 个答案:

没有答案
相关问题