Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to stop a Python script but keep interpreter going

I have a Python script, and I want to execute it up to a certain point, then stop, and keep the interpreter open, so I can see the variables it defines, etc.

I know I could generate an exception, or I could invoke the debugger by running pdb.set_trace(), then stop the debugger, which is what I currently use.

...but is there a command that will just stop the script, as if it had simply reached its end? This would be equivalent to commenting the entire rest of the script (but I would not like doing that), or putting an early return statement in a function.

It seems as if something like this has to exist but I have not found it so far.

Edit: Some more details of my usecase

I'm normally using the regular Python consoles in Spyder. IPython seems like a good thing but ( at least for the version I'm currently on, 2.2.5) some of the normal console's features don't work well in IPython (introspection, auto-completion). More often than not, my code generates matplotlib figures. In debug mode, those cannot be updated (to my knowledge), which is why I need to get completely out of the script, but not the interpreter). Another limit of the debugger is that I can't execute loops in it: you can copy/paste the code for a loop into the regular console and have it execute, but that won't work in the debugger (at least in my Spyder version).

like image 690
Zak Avatar asked Jan 19 '17 17:01

Zak


People also ask

How do I stop the execution of a python script?

There is an EOF character present at the end of each python script that instructs the interpreter to stop the execution of code. While working on a standard input connected to a tty device, we can produce a similar result with CTRL+D on UNIX and CTRL+Z, ENTER on Windows.

How to exit a Python program?

One of the most appropriate functions that we can use to exit from a Python program is the sys.exit () function. This function is available in the sys module and when called it raises the SystemException in Python that then triggers the interpreter to stop further execution of the current python script.

What happens when the Python interpreter reaches the end of EOF?

When the Python interpreter reaches the end of the file (EOF), it notices that it can’t read any more data from the source, whether that be the user’s input through an IDE or reading from a file. To demonstrate, let’s try to get user input and interrupt the interpreter in the middle of execution!

How to stop a Python program while it is waiting for input?

$ python3 input.py Don't type anything! And press CTRL+D to terminate the program while it’s waiting for user input Traceback (most recent call last): File "input.py", line 1, in name=input ("Don't type anything!")


2 Answers

If you have ipython (highly, highly recommended), you can go to any point in your program and add the following lines

import IPython
IPython.embed()

Once your program reaches that point, the embed command will open up a new IPython shell within that context.

I really like to do that for things where I don't want to go the full pdb route.

like image 181
Lagerbaer Avatar answered Oct 05 '22 22:10

Lagerbaer


If you invoke your program with python -i <script>, the interpreter will remain active after the script ends. raise SystemExit would be the easiest way to force it to end at an arbitrary point.

like image 28
jasonharper Avatar answered Oct 05 '22 22:10

jasonharper