如果模块是通过&#39; -m <name>&#39;?启动的,则sys.argv损坏了

时间:2016-11-16 14:32:54

标签: python-3.x command-line-arguments

尝试为我所描述的here问题提供一个肮脏的解决方法,我想通过读取命令行来检索当前执行模块的名称。

但看起来更高的力量试图阻止我实现我的目标..

当我通过

开始my_module
python3 -m my_module

sys.argv恰好是['-m']

这是对的吗?不应该是[]['my_module']甚至是['-m', 'my_module']吗?

我可以在这做什么来获得my_module&#39;?

注意:我知道,我始终可以访问__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

0 个答案:

没有答案