我希望能够从导入的模块中动态检索当前正在执行的模块或类名。下面是一些代码:如何在Python中访问当前正在执行的模块或类名?
foo.py:
def f():
print __name__
bar.py:
from foo import f
def b(): f()
这显然不为__name__
工作是包含模块的名称功能。我想在foo
模块内部访问的是当前使用foo
的执行模块的名称。所以在上面的情况下,它将是bar
,但是如果有任何其他模块导入foo
,我希望foo
动态访问该模块的名称。
编辑:该inspect
模块看起来很有前途,但它不是我正在寻找。我所希望的是我可以访问的某种全局或环境级别的变量,它包含当前执行模块的名称。并不是说我不愿意遍历堆栈来查找这些信息 - 我只是认为Python可能已经公开了这些数据。
编辑:这是我如何使用这个。我有两个不同的Django应用程序,都需要将错误记录到文件。可以说他们被称为“AppOne”和“AppTwo”。我也有一个我想要登录这些文件的地方:“/home/hare/app_logs
”。在任何给定点的每个应用程序中,我希望能够导入我的记录器模块并调用将日志字符串写入文件的日志函数。但是我想要做的是创建一个名为app_logs
的目录,它是当前应用程序的名称(“AppOne”或“AppTwo”),以便每个应用程序的日志文件将放入其各自的日志目录中。
为了做到这一点,我认为最好的方式是记录器模块有权访问某种表示当前应用程序名称的全局变量,因为它负责知道父记录目录的位置,如果应用程序的日志目录尚不存在,则创建它。
你为什么要打破这样的责任分配? – 2009-03-02 16:06:28
我在一个日志记录模块中使用它 - 我想能够告诉哪个外部模块正在尝试记录,而无需调用者传递某种密钥。 – 2009-03-02 16:10:25
您是否正在寻找启动程序执行的模块(即:__name__ =='__main__'的模块?或者直接称为foo.f()的模块,每次foo.f()都可能不同所谓的“ – 2009-03-02 16:18:39