对于蟒蛇无缓冲字符输入Windows机器上(Unbuffered character input f

2019-07-21 05:51发布

我所试图做的

我试图设计一个圈计时秒表。 当您按下“L”,然后一圈完成,当你按下“S”的所有圈完成和时序按顺序显示。

而在C ++中我可以从CONIO.H功能_getch()做到这一点,这将是非常容易的。 我想在Python编写这个程序,因为这将是一个很多更容易,并在C ++处理时间被证明是困难的。

不过我没有写一个程序(这是为立方体时间)此链接: 魔方计时器

问题

有没有像_getch无功能()。 这是一个问题,因为在一圈结束时,您不能按一个键和回车键,因为这将是一次服用和刺激性的用户。

东西我读

我读到的library但可惜它没有窗户端口。

我想,应该根据网站工作的程序。 这是从链接

链接残培食谱

但它没有工作。

我的尝试:

  1. msvcrt.getch()

    >>> import msvcrt
    >>> msvcrt.getch()
    '\xff'

我相信FF是255的十六进制值。

我不明白这是为什么happenning。

  1. readch()如sugggested在@martineau

    进口MSVCRT

    高清readch(回声= TRUE): “在Windows上获取单个字符。” 而msvcrt.kbhit():#清除掉键盘缓冲区msvcrt.getch()CH = msvcrt.getch(),而在 '\ X00 \ xe0' CH:#箭头或功能键前缀? msvcrt.getch()CH = msvcrt.getch()#第二调用返回实际的键代码,如果回声:msvcrt.putch(CH)返回ch.decode()

    A = []

    对于i在范围(10):a.append(readch())

我得到的错误:

>>> 

Traceback (most recent call last):
  File "C:/Python25/1.py", line 30, in <module>
    a.append(readch())
  File "C:/Python25/1.py", line 25, in readch
    return ch.decode()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)

我需要什么帮助

这就像_getch()或等价的东西是在Windows机器上工作的功能。

机规格

IDLE的Python 2.5.4或2.6或2.7

的Windows XP SP3

Answer 1:

这是我用过的,似乎在Windows控制台的工作。 这有点类似,但它只能在Windows上是:ActiveState食谱。 它是基于这个 MSDN文档_getwch()

#### windows only ####
import msvcrt

def readch(echo=True):
    "Get a single character on Windows."
    while msvcrt.kbhit():  # clear out keyboard buffer
        msvcrt.getwch()
    ch = msvcrt.getwch()
    if ch in u'\x00\xe0':  # arrow or function key prefix?
        ch = msvcrt.getwch()  # second call returns the actual key code
    if echo:
        msvcrt.putwch(ch)
    return ch

def pause(prompt='Press any key to continue . . .'):
    if prompt:
        print prompt,
    readch(echo=False)

(已更新为处理Unicode)。



Answer 2:

如果你问有关如何读取输入无需投入,你可能正在寻找结合这需要一个Tkinter的窗口,我相信。

lapEnded = bind_all("<KeyPress-l>", endLap)
stopRunning = bind_all("<KeyPress-s", noMoreRunning)

然后,您定义的功能endLapnoMoreRunning ,其做他们的功能。 根据您的Tkinter和/或Python版本, bind_all可以简单地bind 。 希望这回答了你的问题。



文章来源: Unbuffered character input for python on a windows machine