我如何让我的python脚本等待,直到用户按下任何键?


当前回答

python手册提供了以下内容:

import termios, fcntl, sys, os
fd = sys.stdin.fileno()

oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSANOW, newattr)

oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)

try:
    while 1:
        try:
            c = sys.stdin.read(1)
            print "Got character", repr(c)
        except IOError: pass
finally:
    termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
    fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)

它可以滚动到您的用例中。

其他回答

操作系统。系统似乎总是调用sh,它不识别读取的s和n选项。但是read命令可以传递给bash:

os.system("""bash -c 'read -s -n 1 -p "Press any key to continue..."'""")

我是python的新手,我已经在想我太笨了,不能复制这里提出的最简单的建议。 事实证明,我们应该知道一个陷阱:

当从IDLE执行python脚本时,一些io命令的行为似乎完全不同(因为实际上没有终端窗口)。

如。msvcrt。Getch是非阻塞的,总是返回$ff。 这个问题很久以前就已经被报道过了(参见https://bugs.python.org/issue9290)——它被标记为已修复,不知怎么的,这个问题似乎在当前版本的python/IDLE中仍然存在。

因此,如果上面发布的任何代码对您不起作用,请尝试手动运行脚本,而不是从IDLE运行。

你可以使用键盘库:

import keyboard
keyboard.wait('space')
print('space was pressed, continuing...')

在Python 3中,使用input():

input("Press Enter to continue...")

在Python 2中,使用raw_input():

raw_input("Press Enter to continue...")

如果你想看看他们是否按了一个确切的键(比如“b”),可以这样做:

while True:
    choice = raw_input("> ")

    if choice == 'b' :
        print "You win"
        input("yay")
        break