windows计算机上python的无缓冲字符输入

windows计算机上python的无缓冲字符输入,python,input,character,Python,Input,Character,我想做的事 我正在尝试设计一款计时秒表。当您按“L”时,一圈结束,当您按“S”时,所有圈结束,计时按顺序显示 在C++中,我可以用CONIO.H函数-yGETCHER()来实现这一点,这将是非常容易的。我想用Python编写这个程序,因为它会更容易,而且C++中的时间处理也很难。p> 但我还是在这个链接上写了一个程序(用于多维数据集计时): 问题 没有像_getch()这样的函数。这是一个问题,因为在一圈结束时,你不能按一个键和一个回车键,因为这会花费时间,而且会激怒用户 我读的东西 我读过关

我想做的事

我正在尝试设计一款计时秒表。当您按“L”时,一圈结束,当您按“S”时,所有圈结束,计时按顺序显示

在C++中,我可以用CONIO.H函数-yGETCHER()来实现这一点,这将是非常容易的。我想用Python编写这个程序,因为它会更容易,而且C++中的时间处理也很难。p> 但我还是在这个链接上写了一个程序(用于多维数据集计时):

问题

没有像_getch()这样的函数。这是一个问题,因为在一圈结束时,你不能按一个键和一个回车键,因为这会花费时间,而且会激怒用户

我读的东西

我读过关于诅咒库的文章,但可惜它没有windows端口

我尝试了一个应该根据网站运行的程序。这是来自链接

但它没有起作用

我的尝试:

  • msvcrt.getch()
  • 我需要什么帮助

    一个类似于_getch()的函数,或在windows机器上工作的等效函数

    机器规格

    Python IDLE 2.5.4或2.6或2.7


    Windows XP SP3

    如果您询问如何在没有输入的情况下读取输入,您可能正在寻找绑定 我相信这需要一个Tkinter窗口

    lapEnded = bind_all("<KeyPress-l>", endLap)
    stopRunning = bind_all("<KeyPress-s", noMoreRunning)
    
    lapend=bind_all(“,endLap)
    
    stopRunning=bind\u all(“这是我在Windows控制台中使用的方法。它有点类似于ActiveState方法,只是它只在Windows上工作。它基于
    \u getwch()
    msdn文档


    (更新为处理Unicode)。

    你能给我们看一下你的Python代码以及你是如何使用它的吗?对不起,我在移动设备上。如果你不发布实际的代码就很难帮上忙好的,先生。我一登录到机器上就会发布代码。你是否尝试过导入sys
    而不是getchar
    sys.stdin.read(1)
    ?在2.6+中,如果您想要Unicode,可以使用
    getwch
    /
    putwch
    。由于您使用的是
    b'
    文本,我假设您不需要2.5支持。@eryksun:返回
    wint
    ,阅读后我不确定如何将其转换为Python Unicode字符串。在
    msvcrt
    中已经为您完成了e.A
    wint\u t
    是可以表示
    wchar\u t
    的任何类型,这是Python在3.3之前版本的Windows上用于Unicode的。由于2.x中
    decode
    的默认值是ASCII,使用
    getwch
    意味着您不必担心当前的代码页。Win32为您处理这些。@IcyFlame:
    getch
    是一个控制台IO函数(conio);它在空闲和其他GUI shell中不起作用。
    >>> 
    
    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)
    
    lapEnded = bind_all("<KeyPress-l>", endLap)
    stopRunning = bind_all("<KeyPress-s", noMoreRunning)
    
    #### 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)