Dan*_*ure 30 python python-2.6
我搜索过,这似乎是一个简单的问题而没有一个简单的答案.
我有a/b/c.py要调用的文件python -m a.b.c.我想获得a.b.c模块级别的值.
USAGE = u'''\
Usage:
python -m %s -h
''' % (what_do_i_put_here,)
Run Code Online (Sandbox Code Playgroud)
因此,当我收到-h选项时,我会显示USAGE而不需要在每个脚本中实际记下实际值.
我真的需要通过inspect才能获得所需的价值吗?
谢谢.
编辑:如上所述,有答案(我已经搜索过),但不是简单的答案.使用inspect,使用traceback或操作__file__,__package__并做一些子串来得到答案.但没有什么比我在模块中有一个类的简单,我可以使用myClass.__module__,我会得到我想要的答案.__name__(不幸的是)使用是无用的,因为它总是如此__main__.
此外,这是在python 2.6中,我不能使用任何其他版本.
Sha*_*awa 26
这对我有用:
__loader__.fullname
Run Code Online (Sandbox Code Playgroud)
另外如果我从一个\来做python -m bc,我按预期得到'bc'.
不完全确定__loader__属性是什么,所以让我知道这是不是很好.
编辑:它来自PEP 302:http://www.python.org/dev/peps/pep-0302/
链接中有趣的片段:
load_module()方法在运行任何代码之前必须履行一些职责:
...
- 它应该为模块添加一个__loader__属性,设置为loader对象.这主要用于内省,但可用于特定于导入程序的附加功能,例如获取与导入程序关联的数据.
因此看起来它应该在所有情况下都能正常工作.
使用-m运行时,sys.path[0]包含模块的完整路径.您可以使用它来构建名称.
来源:http://docs.python.org/using/cmdline.html#command-line
另一种选择可以是__package__模块内可用的内置变量.
有很多选项可以获取当前模块的路径/名称。
首先熟悉Python中__file__的使用,点击查看用法。
它保存当前加载的模块的名称。
检查/尝试以下代码,它适用于Python2和Python3。
» module_names.py
import os
print (__file__)
print (os.path.abspath(__file__))
print (os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)
MAC OS X 上的输出:
MacBook-Pro-2:practice admin$ python module_names.py
module_names.py
/Users/admin/projects/Python/python-the-snake/practice/module_names.py
/Users/admin/projects/Python/python-the-snake/practice/module_names.py
Run Code Online (Sandbox Code Playgroud)
所以这里我们得到了当前模块名称的名称及其绝对路径。
| 归档时间: |
|
| 查看次数: |
37870 次 |
| 最近记录: |