Python 手动决定 raw_input 字符串结束时机
我想让用户在控制台输入文字,当他们按下“Tab”键时,从一个列表中自动补全。但是,raw_input
这个函数在用户按下 [Enter] 键之前不会返回输入的内容。
我该如何在用户按下 [Enter] 之前,把输入的字符读入一个变量呢?
*注意:我不想使用 import readline
来实现自动补全,因为这样会有操作系统方面的问题。
2 个回答
1
在*nix系统上,可以使用select
来监听sys.stdin
,这样就可以等待用户输入一个字符,然后用.read()
把它读进来。在Windows系统上,可以用msvcrt.kbhit()
来检查键盘是否有按键被按下,然后用msvcrt.getch()
来获取那个按下的键。
5
关于这个问题,官方有一个常见问题解答,专门针对Unix系统:http://www.python.org/doc/faq/library/#how-do-i-get-a-single-keypress-at-a-time
编辑(摘自Donal Fellows的评论): “问题在于,终端默认是‘熟模式’,这允许简单的行编辑;而要获取按键时的输入,就必须把它设置为‘原始模式’。”(谢谢!)