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


当前回答

简单的使用

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

将在使用Python 2时导致以下错误:

SyntaxError:解析时预期的EOF。

让代码在Python 2和Python 3上都能工作的简单修复是使用:

try:
    input("Press enter to continue")
except SyntaxError:
    pass

其他回答

我不知道有什么平台独立的方法,但是在Windows下,如果你使用msvcrt模块,你可以使用它的getch函数:

import msvcrt
c = msvcrt.getch()
print 'you entered', c

MSCVCRT还包括非阻塞的kbhit()函数,以查看是否在没有等待的情况下按下了一个键(不确定是否有相应的curses函数)。在UNIX下,有一个curses包,但不确定是否可以使用它而不将其用于所有屏幕输出。这段代码在UNIX下工作:

import curses
stdscr = curses.initscr()
c = stdscr.getch()
print 'you entered', chr(c)
curses.endwin()

请注意,curses.getch()返回所按键的序号,以便使其具有与我强制转换时相同的输出。

如果你可以依赖于系统命令,你可以使用:

from __future__ import print_function
import os
import platform

if platform.system() == "Windows":
    os.system("pause")
else:
    os.system("/bin/bash -c 'read -s -n 1 -p \"Press any key to continue...\"'")
    print()

它已被验证可以在Windows、Linux和Mac OS X上与Python 2和3一起工作。

如果您想等待输入(这样用户敲击键盘不会导致一些意想不到的事情发生),请使用

sys.stdin.readline()

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

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

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

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

在Python 3中,使用input():

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

在Python 2中,使用raw_input():

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