假设有一个简单的脚本:
#!/usr/bin/env python3
if __name__ == "__main__":
print("Hello World")
如何在交互式解释器中加载代码但不执行if __name__ == "__main__":
块?默认情况下会执行该块:
$ python3 -i simple-script.py
Hello World
>>> █
假设有一个简单的脚本:
#!/usr/bin/env python3
if __name__ == "__main__":
print("Hello World")
如何在交互式解释器中加载代码但不执行if __name__ == "__main__":
块?默认情况下会执行该块:
$ python3 -i simple-script.py
Hello World
>>> █
不要将其作为参数传递,而应该将其导入解释器。
$ python3
>>> import simple_script
>>>
python -i -c "from vidthumbzip import *"
,这样可以避免在交互式Python shell中输入。但仍然希望使用文件名而不是模块名。 - Grumbelsimple_script
的命名空间是更可取的。 - James Mertz从脚本内部,您可以通过检查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
由于看起来 Python 没有处理这种情况的方法,所以我编写了一个小脚本 ipy
来完成任务:
使用方法:
$ ipy simple-script.py
>>>
if __name__ == "__main__":
块,而只有一个带有main()
函数的模块,并使用setuptools的entry_points
功能从模块生成可执行脚本。
python3 -i simple-script.py
正是这样做的,除了__name__ == "__main__"
问题。 - Grumbel