如何在交互模式下跳过`if __name__ ==" __ main __"`?

时间:2015-05-07 18:40:42

标签: python python-3.x

给出一个简单的脚本:

#!/usr/bin/env python3

if __name__ == "__main__":
    print("Hello World")

如何在不执行if __name__ == "__main__":块的情况下将其加载到交互式解释器中?默认情况下会执行:

$ python3 -i simple-script.py
Hello World
>>> █

5 个答案:

答案 0 :(得分:9)

不要将其作为参数传递,将其导入解释器。

$ python3
>>> import simple_script
>>>

答案 1 :(得分:5)

在脚本本身内,您可以通过查看sys.flags.inspect标记来检测是否传递了-i

import sys

if __name__ == '__main__':
    # code run with or without -i
    if not sys.flags.inspect:
        # code not run with -i

答案 2 :(得分:2)

除了@DanielRoseman的answer,如果使用IPython或jupyter解释器,则可以将%run magic-n标志一起使用:

-n __name__不会设置为__main__,而是运行文件的名称,无需扩展名(就像python在导入时一样)。这样就可以运行脚本并重新加载其中的定义,而无需调用受if __name__ ==“ __main__”子句保护的代码。

答案 3 :(得分:0)

由于Python没有办法处理这种情况,我写了一个小脚本ipy来完成任务:

用法:

$ ipy simple-script.py
>>>

答案 4 :(得分:0)

这个问题最干净的解决方案是以没有if __name__ == "__main__":块的方式编写项目,而只是拥有一个main()函数的模块并使用setuptools {{1} }功能从模块生成可执行脚本。