我如何让我的python脚本等待,直到用户按下任何键?
当前回答
如果您想等待输入(这样用户敲击键盘不会导致一些意想不到的事情发生),请使用
sys.stdin.readline()
其他回答
简单的使用
input("Press Enter to continue...")
将在使用Python 2时导致以下错误:
SyntaxError:解析时预期的EOF。
让代码在Python 2和Python 3上都能工作的简单修复是使用:
try:
input("Press enter to continue")
except SyntaxError:
pass
如果你想看看他们是否按了一个确切的键(比如“b”),可以这样做:
while True:
choice = raw_input("> ")
if choice == 'b' :
print "You win"
input("yay")
break
我不知道有什么平台独立的方法,但是在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()返回所按键的序号,以便使其具有与我强制转换时相同的输出。
操作系统。系统似乎总是调用sh,它不识别读取的s和n选项。但是read命令可以传递给bash:
os.system("""bash -c 'read -s -n 1 -p "Press any key to continue..."'""")
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)
它可以滚动到您的用例中。
推荐文章
- 如何在交互式Python中查看整个命令历史?
- 如何显示有两个小数点后的浮点数?
- 如何用OpenCV2.0和Python2.6调整图像大小
- 在每个列表元素上调用int()函数?
- 当使用代码存储库时,如何引用资源的相对路径
- 如何在Flask-SQLAlchemy中按id删除记录
- 在Python中插入列表的第一个位置
- Python Pandas只合并某些列
- 如何在一行中连接两个集而不使用“|”
- 从字符串中移除前缀
- 代码结束时发出警报
- 如何在Python中按字母顺序排序字符串中的字母
- 在matplotlib中将y轴标签添加到次要y轴
- 如何消除数独方块的凹凸缺陷?
- 为什么出现这个UnboundLocalError(闭包)?