如何获取python中最顶层(入口)脚本的名称



我在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__

最新更新