if __name__ == '__main__' in IPython

前端 未结 4 671
情话喂你
情话喂你 2021-01-01 13:30

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

相关标签:
4条回答
  • 2021-01-01 13:44

    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

    0 讨论(0)
  • 2021-01-01 13:55

    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"
    
    0 讨论(0)
  • 2021-01-01 14:04

    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.

    0 讨论(0)
  • 2021-01-01 14:09

    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.

    0 讨论(0)
提交回复
热议问题