Skip to content Skip to sidebar Skip to footer

If __name__ == '__main__' In Ipython

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 into the interactive i

Solution 1:

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__'inglobals():
    # do what you need

For obvious reasons, __file__ is defined only for import'ed modules, and not for interactive shell.

Solution 2:

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.

Solution 3:

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 indir():
    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__'andnotcallable(globals().get("get_ipython", None)):
    print"I'm not loaded with IPython"

Solution 4:

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

Post a Comment for "If __name__ == '__main__' In Ipython"