尝试为我所描述的here问题提供一个肮脏的解决方法,我想通过读取命令行来检索当前执行模块的名称。
但看起来更高的力量试图阻止我实现我的目标..
当我通过
开始my_module
时
python3 -m my_module
sys.argv
恰好是['-m']
这是对的吗?不应该是[]
,['my_module']
甚至是['-m', 'my_module']
吗?
我可以在这做什么来获得my_module'?
注意:我知道,我始终可以访问__name__
或__package__
,但我需要从内部查找模块的名称一个与执行模块本身不同的模块。
如何重现:
我有以下目录结构:
my_module/
├── __init__.py
└── __main__.py
__main__
为空且__init__.py
仅包含
import sys
print(sys.argv)
输出:
$ python3 -m my_module
['-m']
解决方法:
如果你需要类似的东西,最后我就是这样做的:
def get_module_name() -> str:
from psutil import Process
from os import getpid
_cmdline = Process(getpid()).cmdline
try:
return _cmdline[_cmdline.index('-m') + 1]
except ValueError:
return None