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