[英]how do I determine whether a python script is imported as module or run as script?
这个问题很简单,但没有通过搜索回答。 如何在python脚本中确定此脚本是作为模块导入还是作为脚本运行? python有什么区别吗?
问题是,仅当作为脚本运行时,我才想评估命令行参数,如果仅导入模块以在另一个脚本中使用它,则不希望。 (我希望能够将一个脚本同时用作库和程序。)恐怕最有效的方法是建立lib和使用该脚本的第二个脚本,但是我想为小型工具提供第二个选择/ libs。
来自python docs :
当您使用以下命令运行Python模块时
python fibo.py
该模块中的代码将被执行,就像您导入它一样,但是
__name__
设置为"__main__"
。 这意味着通过在模块末尾添加以下代码:
if __name__ == '__main__':
# Running as a script
您可以将文件用作脚本以及可导入的模块,因为解析命令行的代码仅在将模块作为“主”文件执行时才运行
正如@bobince指出的:
如果您是
python -m somemodule
调用的__main__
那么您也将成为__main__
假设您在名为foo
的文件夹中都有一个Python文件bar.py
和一个空的__init__.py
:
$ tree
.
└── foo
├── __init__.py
└── bar.py
$ cat foo/__init__.py
下面的Python代码块是foo/bar.py
的内容。
__name__
(不起作用) print('Code executed as a %s' % 'script' if __name__ == '__main__' else 'module')
这将产生:
$ python foo/bar.py
Code executed as a script
$ python -m foo.bar
Code executed as a script
vars()
和sys.modules
import sys
mod_name = vars(sys.modules[__name__])['__package__']
print('Code executed as a ' + ('module named %s' % mod_name if mod_name else 'script'))
这将产生:
$ python foo/bar.py
Code executed as a module named foo
$ python -m foo.bar
Code executed as a script
import sys
try:
import foo
print('Code executed as a module')
except ImportError:
print('Code executed as a script')
# Code will fail here, but you can still print a comprehensive error message before exiting:
print('Usage: python -m foo.bar')
sys.exit()
这将产生:
$ python foo/bar.py
Code executed as a module
$ python -m foo.bar
Code executed as a script
Usage: python -m foo.bar
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.