How to make a script wait for a pressed key? How to make a script wait for a pressed key? python python

How to make a script wait for a pressed key?


In Python 3 use input():

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

In Python 2 use raw_input():

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

This only waits for the user to press enter though.

One might want to use msvcrt ((Windows/DOS only) The msvcrt module gives you access to a number of functions in the Microsoft Visual C/C++ Runtime Library (MSVCRT)):

import msvcrt as mdef wait():    m.getch()

This should wait for a key press.

Additional info:

in Python 3 raw_input() does not exist

In Python 2 input(prompt) is equivalent to eval(raw_input(prompt))


One way to do this in Python 2, is to use raw_input():

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

In python3 it's just input()


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.

def read_single_keypress():    """Waits for a single keypress on stdin.    This is a silly function to call if you need to do it a lot because it has    to store stdin's current setup, setup stdin for reading single keystrokes    then read the single keystroke then revert stdin back after reading the    keystroke.    Returns a tuple of characters of the key that was pressed - on Linux,     pressing keys like up arrow results in a sequence of characters. Returns     ('\x03',) on KeyboardInterrupt which can happen when a signal gets    handled.    """    import termios, fcntl, sys, os    fd = sys.stdin.fileno()    # save old state    flags_save = fcntl.fcntl(fd, fcntl.F_GETFL)    attrs_save = termios.tcgetattr(fd)    # make raw - the way to do this comes from the termios(3) man page.    attrs = list(attrs_save) # copy the stored version to update    # iflag    attrs[0] &= ~(termios.IGNBRK | termios.BRKINT | termios.PARMRK                  | termios.ISTRIP | termios.INLCR | termios. IGNCR                  | termios.ICRNL | termios.IXON )    # oflag    attrs[1] &= ~termios.OPOST    # cflag    attrs[2] &= ~(termios.CSIZE | termios. PARENB)    attrs[2] |= termios.CS8    # lflag    attrs[3] &= ~(termios.ECHONL | termios.ECHO | termios.ICANON                  | termios.ISIG | termios.IEXTEN)    termios.tcsetattr(fd, termios.TCSANOW, attrs)    # turn off non-blocking    fcntl.fcntl(fd, fcntl.F_SETFL, flags_save & ~os.O_NONBLOCK)    # read a single keystroke    ret = []    try:        ret.append(sys.stdin.read(1)) # returns a single character        fcntl.fcntl(fd, fcntl.F_SETFL, flags_save | os.O_NONBLOCK)        c = sys.stdin.read(1) # returns a single character        while len(c) > 0:            ret.append(c)            c = sys.stdin.read(1)    except KeyboardInterrupt:        ret.append('\x03')    finally:        # restore old state        termios.tcsetattr(fd, termios.TCSAFLUSH, attrs_save)        fcntl.fcntl(fd, fcntl.F_SETFL, flags_save)    return tuple(ret)