windows计算机上python的无缓冲字符输入
我想做的事 我正在尝试设计一款计时秒表。当您按“L”时,一圈结束,当您按“S”时,所有圈结束,计时按顺序显示 在C++中,我可以用CONIO.H函数-yGETCHER()来实现这一点,这将是非常容易的。我想用Python编写这个程序,因为它会更容易,而且C++中的时间处理也很难。p> 但我还是在这个链接上写了一个程序(用于多维数据集计时): 问题 没有像_getch()这样的函数。这是一个问题,因为在一圈结束时,你不能按一个键和一个回车键,因为这会花费时间,而且会激怒用户 我读的东西 我读过关于诅咒库的文章,但可惜它没有windows端口 我尝试了一个应该根据网站运行的程序。这是来自链接 但它没有起作用 我的尝试:windows计算机上python的无缓冲字符输入,python,input,character,Python,Input,Character,我想做的事 我正在尝试设计一款计时秒表。当您按“L”时,一圈结束,当您按“S”时,所有圈结束,计时按顺序显示 在C++中,我可以用CONIO.H函数-yGETCHER()来实现这一点,这将是非常容易的。我想用Python编写这个程序,因为它会更容易,而且C++中的时间处理也很难。p> 但我还是在这个链接上写了一个程序(用于多维数据集计时): 问题 没有像_getch()这样的函数。这是一个问题,因为在一圈结束时,你不能按一个键和一个回车键,因为这会花费时间,而且会激怒用户 我读的东西 我读过关
msvcrt.getch()
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
而不是getcharsys.stdin.read(1)
?在2.6+中,如果您想要Unicode,可以使用getwch
/putwch
。由于您使用的是b'
文本,我假设您不需要2.5支持。@eryksun:返回wint
,阅读后我不确定如何将其转换为Python Unicode字符串。在msvcrt
中已经为您完成了e.Awint\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)