Reputation: 414
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 an error.
I want a code that closes your script without using an error.
Does anyone have an idea? Google gives me the input option, but I don't want that It closes using this error:
Traceback (most recent call last):
File "C:/Python27/test", line 1, in <module>
input('Press Any Key To Exit')
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
Upvotes: 19
Views: 107434
Reputation: 1
The following works on version 2.7.6. If you add raw_input('Press any key to exit')
it will not display any error codes but it will tell you that the program exited with code 0. For example this is my first program. MyFirstProgram.
Upvotes: 0
Reputation: 1
You can use:
import sys
print("Press any key to continue")
input()
sys.exit()
Upvotes: 0
Reputation: 1029
msvrct
- built-in Python module solution (windows)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
>>>
>>>
... print("Press any key to continue...")
... _ = getch()
... exit()
Upvotes: 5
Reputation: 1
You can use this code:
from os import system as console
console("@echo off&cls")
#Your main code code
print("Press Any Key To Exit")
console("pause>NUL&exit")
Upvotes: 0
Reputation: 537
In python 3:
while True:
#runtime..
answer = input("ENTER something to quit: ")
if answer:
break
Upvotes: 0
Reputation: 363486
This syntax error is caused by using input
on Python 2, which will try to eval
whatever is typed in at the terminal prompt. If you've pressed enter then Python will essentially try to eval an empty string, eval("")
, which causes a SyntaxError
instead of the usual NameError
.
If you're happy for "any" key to be the enter key, then you can simply swap it out for raw_input
instead:
raw_input("Press Enter to continue")
Note that on Python 3 raw_input
was renamed to input
.
For users finding this question in search, who really want to be able to press any key to exit a prompt and not be restricted to using enter, you may consider to use a 3rd-party library for a cross-platform solution. I recommend the helper library readchar
which can be installed with pip install readchar
. It works on Linux, macOS, and Windows and on either Python 2 or Python 3.
import readchar
print("Press Any Key To Exit")
k = readchar.readchar()
Upvotes: 16
Reputation: 16851
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.')
Upvotes: 3
Reputation: 10176
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!'
Upvotes: 1