首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >if __name__ == '__main__‘in IPython

if __name__ == '__main__‘in IPython
EN

Stack Overflow用户
提问于 2014-04-08 05:00:02
回答 4查看 11.6K关注 0票数 25

我有一些Python脚本,它们使用if __name__ == '__main__'技巧让一些代码仅在脚本被调用时运行,而不是在加载到交互式解释器中时运行。但是,当我使用%edit命令从IPython编辑这些脚本时,IPython显然将__name__设置为'__main__',因此每次我退出编辑会话时都会运行代码。当从IPython编辑模块时,有没有好的方法使这些代码不运行?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-08 05:56:50

当在Emacs中工作时(我假设它与您使用%edit获得的效果很接近),我通常使用以下技巧:

代码语言:javascript
复制
if __name__ == '__main__' and '__file__' in globals():
    # do what you need

由于显而易见的原因,__file__只为import编写的模块定义,而不是为交互式shell定义。

票数 25
EN

Stack Overflow用户

发布于 2014-04-08 05:49:33

听起来您可能只需要-x开关:

代码语言:javascript
复制
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...

当您调用%edit -x时,代码在您退出编辑器后不会执行。

票数 11
EN

Stack Overflow用户

发布于 2014-04-08 05:45:34

IPython将函数get_ipython()添加到全局可用变量中。因此,您可以测试globals()中是否存在此函数,以做出决定:

代码语言:javascript
复制
if __name__ == '__main__' and "get_ipython" not in dir():
    print "I'm not loaded with IPython"

上面的代码只是测试是否存在名为get_ipython的全局变量。要测试此变量是否可调用,您可以执行以下操作:

代码语言:javascript
复制
if __name__ == '__main__' and not callable(globals().get("get_ipython", None)):
    print "I'm not loaded with IPython"
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22923002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档