How to exit Python script in Command Prompt?
It indeed depends on the OS, and probably on the version of Python you are using.
As you mentioned, ctrl+C does not work on your Windows 10 with Python 3.6, but it does work on my Windows 10 with Python 3.4. Therefore, you really need to try and see what works for you.
Try the following commands, and keep the one that works:
- ctrl+C
- ctrl+D
- ctrl+Z then Return
In addition, the following should work with any terminal:
exit()
then Returnquit()
then Return
Trivia: if you type quit
and hit Return, the console tells you, at least for Python 3.4:
Use quit() or Ctrl-Z plus Return to exit
How to stop python script using command line
Since you want to be able to control via command line, one way to do this is to use a temporary "flag" file, that will be created by myprogram.py start
, and deleted by myprogram.py stop
. The key is that, while the file exists, myprogram.py
will keep running the loop.
import os
import sys
import time
FLAGFILENAME = 'startstop.file'
def set_file_flag(startorstop):
# In this case I am using a simple file, but the flag could be
# anything else: an entry in a database, a specific time...
if startorstop:
with open(FLAGFILENAME, "w") as f:
f.write('run')
else:
if os.path.isfile(FLAGFILENAME):
os.unlink(FLAGFILENAME)
def is_flag_set():
return os.path.isfile(FLAGFILENAME)
def get_from_ftp(server, login, password):
print("Still running...")
time.sleep(1)
def main():
if len(sys.argv) < 2:
print "Usage: <program> start|stop"
sys.exit()
start_stop = sys.argv[1]
if start_stop == 'start':
print "Starting"
set_file_flag(True)
if start_stop == 'stop':
print "Stopping"
set_file_flag(False)
server, login, password = 'a', 'b', 'c'
while is_flag_set():
get_from_ftp(server, login, password)
print "Stopped"
if __name__ == '__main__':
main()
As you can imagine, the flag could be anything else. This is very simple, and if you want to have more than two instances running, then you should at least name the files differently per instance (for example, with a CLI parameter) so you can selectively stop each instance.
I do like the idea proposed by @cdarke about intercepting and handling CTRL+C, though, and the mechanism is very similar to my approach, and works well with a single instance.
How do I stop a Python script from running in my command line?
You can kill it from task manager.
Programmatically stop execution of python script?
sys.exit() will do exactly what you want.
import sys
sys.exit("Error message")
How do I terminate a script?
import sys
sys.exit()
details from the sys
module documentation:
sys.exit([arg])
Exit from Python. This is implemented by raising the
SystemExit
exception, so cleanup actions specified by finally clauses
oftry
statements are honored, and it is possible to intercept the
exit attempt at an outer level.The optional argument arg can be an integer giving the exit status
(defaulting to zero), or another type of object. If it is an integer,
zero is considered “successful termination” and any nonzero value is
considered “abnormal termination” by shells and the like. Most systems
require it to be in the range 0-127, and produce undefined results
otherwise. Some systems have a convention for assigning specific
meanings to specific exit codes, but these are generally
underdeveloped; Unix programs generally use 2 for command line syntax
errors and 1 for all other kind of errors. If another type of object
is passed, None is equivalent to passing zero, and any other object is
printed tostderr
and results in an exit code of 1. In particular,sys.exit("some error message")
is a quick way to exit a program when
an error occurs.Since
exit()
ultimately “only” raises an exception, it will only exit
the process when called from the main thread, and the exception is not
intercepted.
Note that this is the 'nice' way to exit. @glyphtwistedmatrix below points out that if you want a 'hard exit', you can use os._exit(*errorcode*)
, though it's likely os-specific to some extent (it might not take an errorcode under windows, for example), and it definitely is less friendly since it doesn't let the interpreter do any cleanup before the process dies. On the other hand, it does kill the entire process, including all running threads, while sys.exit()
(as it says in the docs) only exits if called from the main thread, with no other threads running.
Related Topics
Macos: How to Downgrade Homebrew Python
How to Remove Name and Dtype from Pandas Output
Pandas Counting and Summing Specific Conditions
How to Save a Pandas Dataframe Table as a Png
How to Find 3 Immediate Words After Keyword Match Using Python
Calculating the Area Under a Curve Given a Set of Coordinates, Without Knowing the Function
Decode Utf-8 Encoding in Json String
Python How to Use Excelwriter to Write into an Existing Worksheet
How to Count the Amount of Sentences in a Paragraph in Python
Using Selenium in Python to Save a Webpage on Firefox
Pandas Filtering for Multiple Substrings in Series
How to Extract Hours and Minutes from a Datetime.Datetime Object
Print() Prints Only Every Second Input
Replacing All Negative Values in Certain Columns by Another Value in Pandas
How to Add Parenthesis Around a Substring in a String
Using Regex to Get the Value Between Two Characters (Python 3)