Я хотел бы иметь возможность динамически извлекать текущий исполняемый модуль или имя класса из импортированного модуля. Вот некоторый код:
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
". В каждом приложении в любой данный момент я хотел бы иметь возможность импортировать мой модуль логгера и вызывать функцию log, которая записывает строку журнала в файл. Однако я хотел бы создать каталог под app_logs
, который является именем текущего приложения («AppOne» или «AppTwo»), чтобы файлы журналов каждого приложения помещались в соответствующие каталоги журналов.
Чтобы сделать это, я подумал, что для модуля логгера лучше всего иметь доступ к некоторой глобальной переменной, которая обозначает имя текущего приложения, поскольку оно отвечает за знание местоположения родительского каталога журналирования и создание каталог журналов приложения, если он еще не существует.