I have Python scripts that use the if __name__ == \'__main__\'
trick to have some code only run when the script is called as a script and not when it is loaded
IPython automatically executes the code you write with the %edit
command. You can use %edit -x
to specify that you do NOT want to run the code you were just editing.
http://ipython.org/ipython-doc/stable/api/generated/IPython.core.magics.code.html
IPython adds the function get_ipython()
to the globally available variables. So you can test, whether this function exist in globals()
to make your decision:
if __name__ == '__main__' and "get_ipython" not in dir():
print "I'm not loaded with IPython"
The above code just tests whether there is a global variable with name get_ipython
. To also test whether this variable is callable, you can do:
if __name__ == '__main__' and not callable(globals().get("get_ipython", None)):
print "I'm not loaded with IPython"
When working from within Emacs (which I assume is close to what you get with %edit
), I usually use this trick:
if __name__ == '__main__' and '__file__' in globals():
# do what you need
For obvious reasons, __file__
is defined only for import
'ed modules, and not for interactive shell.
It sounds like you might just need the -x
switch:
In [1]: %edit
IPython will make a temporary file named: /tmp/ipython_edit_J8j9Wl.py
Editing... done. Executing edited code...
Name is main -- executing
Out[1]: "if __name__ == '__main__':\n print 'Name is main -- executing'\n"
In [2]: %edit -x /tmp/ipython_edit_J8j9Wl
Editing...
When you call %edit -x
the code is not executed after you exit your editor.