我在Python中有一个实用程序模块,需要知道它正在使用的应用程序的名称。实际上,这意味着调用用于启动应用程序的顶级python脚本的名称(即__name=="__main__"为真的脚本)。__name__给了我当前python文件的名称,但我如何获得调用链中最顶层的名称?
将我的Google查询切换为"如何从python中找到进程名称"vs如何找到"顶级脚本名称",我发现这对主题的处理过于彻底。其摘要如下:
import __main__
import os
appName = os.path.basename(__main__.__file__).strip(".py")
您可以使用inspect
模块。例如:
a.py :
#!/usr/bin/python
import b
b.py :
#!/usr/bin/python
import inspect
print inspect.stack()[-1][1]
运行python b.py
打印b.py
。运行python a.py
打印a.py
然而,我想支持sys.argv[0]
的建议,因为这是一个更明智和更习惯的建议。
在Python 3.9中(如注释所述)没有__main__
标识符。然而,该模块的名称仍然是'__main__'
(带有引号,因为它是字符串)。否则通常的__name__=='__main__'
习惯用法将不起作用。
因此,解决方案很简单:只需使用sys.modules['__main__'].__file__
而不是__main__.__file__
。