So, as the title says, I want a proper code to close my python script.
So far, I\'ve used input(\'Press Any Key To Exit\')
, but what that does, is generate a er
Here's a way to end by pressing any key on *nix, without displaying the key and without pressing return. (Credit for the general method goes to Python read a single character from the user.) From poking around SO, it seems like you could use the msvcrt
module to duplicate this functionality on Windows, but I don't have it installed anywhere to test. Over-commented to explain what's going on...
import sys, termios, tty
stdinFileDesc = sys.stdin.fileno() #store stdin's file descriptor
oldStdinTtyAttr = termios.tcgetattr(stdinFileDesc) #save stdin's tty attributes so I can reset it later
try:
print 'Press any key to exit...'
tty.setraw(stdinFileDesc) #set the input mode of stdin so that it gets added to char by char rather than line by line
sys.stdin.read(1) #read 1 byte from stdin (indicating that a key has been pressed)
finally:
termios.tcsetattr(stdinFileDesc, termios.TCSADRAIN, oldStdinTtyAttr) #reset stdin to its normal behavior
print 'Goodbye!'
in Windows:
if msvcrt.kbhit():
if msvcrt.getch() == b'q':
exit()
I would discourage platform specific functions in python if you can avoid them, but you could use the built-in msvcrt module.
from msvcrt import getch
junk = getch() # Assign to a variable just to suppress output. Blocks until key press.
As far as I know there is no way to 'press any key'. The input and raw_input commands require you to press the ENTER key. (raw_input is not supported in Python 3.x)
Have you tried raw_input()
? It could be that you are getting a syntax error by using input()
on python 2.x, which will try to eval
whatever it gets.
A little late to the game, but I wrote a library a couple years ago to do exactly this. It exposes both a pause()
function with a customizable message and the more general, cross-platform getch()
function inspired by this answer.
Install with pip install py-getch
, and use it like this:
from getch import pause
pause()
This prints 'Press any key to continue . . .'
by default. Provide a custom message with:
pause('Press Any Key To Exit.')
For convenience, it also comes with a variant that calls sys.exit(status)
in a single step:
pause_exit(0, 'Press Any Key To Exit.')
Check it out.