给出一个简单的脚本:
#!/usr/bin/env python3
if __name__ == "__main__":
print("Hello World")
如何在不执行if __name__ == "__main__":
块的情况下将其加载到交互式解释器中?默认情况下会执行:
$ python3 -i simple-script.py
Hello World
>>> █
答案 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)
答案 4 :(得分:0)
这个问题最干净的解决方案是以没有if __name__ == "__main__":
块的方式编写项目,而只是拥有一个main()
函数的模块并使用setuptools {{1} }功能从模块生成可执行脚本。