如何在Windows机器上使用Python让用户输入字符串并设置超时?

3 投票
1 回答
576 浏览
提问于 2025-04-15 21:05

我想让用户输入一些东西,但又不想一直等下去。Linux有解决办法,具体可以参考这个链接:Python中带超时的键盘输入,但我是在Windows环境下。有没有人能帮帮我?

1 个回答

2

感谢 Alex Martelli

不幸的是,在Windows系统上,select.select 这个功能只能在网络连接上使用,不能用在普通文件或者控制台上。所以,如果你想在Windows上运行,就需要换一种方法。在Windows系统中,Python的标准库里有一个小模块叫做 msvcrt,里面有一些函数,比如 msvcrt.kbhit,可以告诉你是否有按键等待被读取。在这里,你可以先用 sys.stdout.write 输出提示信息,然后进入一个小循环(可以加上 time.sleep(0.2 之类的),这个循环会等待用户是否按下了任何键——如果按了键,你就可以用 sys.stdin.readline 等等来读取输入,但如果在你设定的超时时间结束后,用户没有按下任何键,那就直接返回一个空字符串。

以上这些假设是,如果用户已经开始输入内容,你就想无限期地等待(而不是在他们输入答案的过程中超时!)。否则,你就需要做更多的工作,因为你必须确保用户按下了回车键(这意味着你需要查看 sys.stdin 里面的内容,或者使用 msvcrt.getch,一个字符一个字符地读取)。幸运的是,从用户界面的角度来看,如果用户已经开始输入,就无限期等待的这个稍微简单的方法似乎是更好的选择——这样可以让你处理无人值守的控制台,同时如果用户在场的话,也能给他们足够的时间来完成他们的答案。

撰写回答