Python 手动决定 raw_input 字符串结束时机

5 投票
2 回答
851 浏览
提问于 2025-04-15 22:19

我想让用户在控制台输入文字,当他们按下“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的评论): “问题在于,终端默认是‘熟模式’,这允许简单的行编辑;而要获取按键时的输入,就必须把它设置为‘原始模式’。”(谢谢!)

撰写回答