如何等待按键?
如何让我的 python 脚本等待用户按下任意键?
How do I make my python script wait until the user presses any key?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何让我的 python 脚本等待用户按下任意键?
How do I make my python script wait until the user presses any key?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(13)
在Python 3中,使用
input()
:在Python 2中,使用
raw_input()
:这只等待用户按下回车键。
在 Windows/DOS 上,人们可能想要使用
msvcrt
。msvcrt
模块使您可以访问 Microsoft Visual C/C++ 运行时库 (MSVCRT) 中的许多函数:这应该等待按键。
注意:
在 Python 3 中,
raw_input()
不存在。在 Python 2 中,
input(prompt)
相当于eval(raw_input(prompt))
。In Python 3, use
input()
:In Python 2, use
raw_input()
:This only waits for the user to press enter though.
On Windows/DOS, one might want to use
msvcrt
. Themsvcrt
module gives you access to a number of functions in the Microsoft Visual C/C++ Runtime Library (MSVCRT):This should wait for a key press.
Notes:
In Python 3,
raw_input()
does not exist.In Python 2,
input(prompt)
is equivalent toeval(raw_input(prompt))
.在 Python 3 中,使用
input()
:在 Python 2 中,使用
raw_input()
:In Python 3, use
input()
:In Python 2, use
raw_input()
:在我的 Linux 机器上,我使用以下代码。 这与我在其他地方看到的代码类似(例如在旧的 python 常见问题解答中),但是该代码在一个紧密的循环中旋转,而该代码则不然,并且有很多奇怪的极端情况,代码没有考虑到这一点代码确实如此。
On my linux box, I use the following code. This is similar to code I've seen elsewhere (in the old python FAQs for instance) but that code spins in a tight loop where this code doesn't and there are lots of odd corner cases that code doesn't account for that this code does.
如果您同意依赖系统命令,您可以使用:
它已被验证可以在 Windows、Linux 和 Mac OS X 上与 Python 2 和 3 一起使用。
If you are ok with depending on system commands you can use:
It has been verified to work with Python 2 and 3 on Windows, Linux and Mac OS X.
简单地
使用Python 2时会出现以下错误:
要使代码在 Python 2 和 Python 3 上都能工作,简单的修复方法是使用:
Simply using
will cause the following error when using Python 2:
Simple fix for the code to work on both Python 2 and Python 3 is to use:
跨平台,Python 2/3代码:
我删除了fctl/非阻塞的东西,因为它给出了
IOError
s,而我不需要它。 我专门使用这段代码是因为我希望它被阻止。 ;)附录:
我在 PyPI 上的一个包中实现了这个,还有很多其他的好东西,称为 控制台:
Cross Platform, Python 2/3 code:
I removed the fctl/non-blocking stuff because it was giving
IOError
s and I didn't need it. I'm using this code specifically because I want it to block. ;)Addendum:
I implemented this in a package on PyPI with a lot of other goodies called console:
python 手册 提供以下内容:
可以将其纳入您的用例中。
The python manual provides the following:
which can be rolled into your use case.
我不知道独立于平台的方法,但是在 Windows 下,如果您使用 msvcrt 模块,则可以使用其
getch
函数:mscvcrt 还包括非阻塞
kbhit ()
函数来查看是否按下了某个键而无需等待(不确定是否有相应的curses 函数)。 在UNIX下,有curses包,但不确定是否可以在不将其用于所有屏幕输出的情况下使用它。 此代码在 UNIX 下工作:请注意,curses.getch() 返回按下的键的序号,以便使其具有与我必须强制转换它相同的输出。
I don't know of a platform independent way of doing it, but under Windows, if you use the msvcrt module, you can use its
getch
function:mscvcrt also includes the non-blocking
kbhit()
function to see if a key was pressed without waiting (not sure if there's a corresponding curses function). Under UNIX, there is the curses package, but not sure if you can use it without using it for all of the screen output. This code works under UNIX:Note that
curses.getch()
returns the ordinal of the key pressed so to make it have the same output I had to cast it.我是Python新手,我已经在想我太愚蠢了,无法重现这里提出的最简单的建议。
事实证明,有一个应该知道的陷阱:
当从 IDLE 执行 python 脚本时,某些 IO 命令的行为似乎完全不同(因为实际上没有终端窗口)。
例如。 msvcrt.getch 是非阻塞的,并且始终返回 $ff。
很久以前就已经报道过这一点(参见例如 https://bugs.python.org/issue9290 ) -并且它被标记为已修复,不知怎的,这个问题似乎在当前版本的 python/IDLE 中仍然存在。
因此,如果上面发布的任何代码对您不起作用,请尝试手动运行脚本,并且不要从 IDLE 运行。
I am new to python and I was already thinking I am too stupid to reproduce the simplest suggestions made here.
It turns out, there's a pitfall one should know:
When a python-script is executed from IDLE, some IO-commands seem to behave completely different (as there is actually no terminal window).
Eg. msvcrt.getch is non-blocking and always returns $ff.
This has already been reported long ago (see e.g. https://bugs.python.org/issue9290 ) - and it's marked as fixed, somehow the problem seems to persist in current versions of python/IDLE.
So if any of the code posted above doesn't work for you, try running the script manually, and NOT from IDLE.
您可以使用 键盘 库:
You could use the keyboard library:
如果你想等待输入(这样用户敲击键盘就不会导致意外的事情发生)使用
If you want to wait for enter (so the user knocking the keyboard does not cause something un-intended to happen) use
os.system 似乎总是调用 sh ,它无法识别 s 和 n 选项进行读取。 然而,读取命令可以传递给 bash:
os.system
seems to always invokesh
, which does not recognize the s and n options for read. However the read command can be passed to bash:如果您想查看他们是否按下了确切的键(例如“b”),请执行以下操作:
If you want to see if they pressed a exact key (like say 'b') Do this: