Как я могу получить доступ к текущему имени модуля выполнения или имени класса в Python?

Что вам не хватает, так это то, что matches заполняется одной записью для каждой группы захвата (включая всю согласованную подстроку как 0-й захват).

Если вы пишете

std::regex needle("a(b)c");
]

, то вы получите matches.size()==2, с matches[0]=="abc" и matches[1]=="b".

40
задан Andrew Hare 3 March 2009 в 02:34
поделиться

6 ответов

Из комментария - не вопрос.

мне просто любопытно видеть, возможно ли то, что я пытаюсь сделать.

ответ на ", это возможный" всегда является "да". Всегда. Если Ваш вопрос не включает путешествие во времени, антигравитационное или вечное движение.

, Так как ответ всегда - "да", Ваш вопрос плохо формируется. Реальный вопрос, "что хороший путь состоит в том, чтобы иметь мой модуль входа, знают имя клиента?" или что-то как этот.

ответ, "Принимают его в качестве параметра". Не бездельничайте с осмотром или поиском таинственного globals или других приемов.

Просто следуют шаблону разработки logging.getLogger () и используют явно названные регистраторы. Общая идиома является следующим

logger= logging.getLogger( __name__ )

, Который обрабатывает почти весь журнал, называющий отлично.

48
ответ дан ndmeiri 23 September 2019 в 16:01
поделиться

"В настоящее время выполняющийся модуль" ясно является нечто, поскольку это - то, что содержит функцию, в настоящее время работающую - я думаю лучшее описание относительно того, что Вы хотите, модуль непосредственной вызывающей стороны нечто (который может самостоятельно быть нечто, если Вы называете f () от функции в нечто названным функцией в панели. То, как далеко Вы хотите подняться, зависит от того, для чего Вы хотите это.

В любом случае, принимая Вы хотите непосредственную вызывающую сторону, можно получить это путем хождения по стеку вызовов. Это может быть выполнено путем вызова sys._getframe с aprropriate количеством уровней для обхода.

def f():
    caller = sys._getframe(1)  # Obtain calling frame
    print "Called from module", caller.f_globals['__name__']

[Редактирование] : На самом деле использование эти осматривает , модуль, как предложено выше является, вероятно, более чистым способом получить стековый фрейм. Эквивалентный код:

def f():
    caller = inspect.currentframe().f_back
    print "Called from module", caller.f_globals['__name__']

(sys. _ getframe документируется как являющийся для внутреннего пользования - осмотреть модуль является более надежным API)

20
ответ дан Brian 23 September 2019 в 16:01
поделиться

Я думаю, что Вы хотите использовать, эти , осматривают модуль, для осмотра стека этапа выполнения Python. Проверьте этот учебное руководство . Я думаю, что это обеспечивает почти точный пример того, что Вы хотите сделать.

11
ответ дан nstehr 23 September 2019 в 16:01
поделиться

__file__ путь текущего модуля, вызов выполняется.

12
ответ дан utku_karatas 23 September 2019 в 16:01
поделиться

Это было некоторое время, так как я сделал Python, но я полагаю, что можно получить доступ к globals и местным жителям вызывающей стороны через traceback.

2
ответ дан Mr Fooz 23 September 2019 в 16:01
поделиться

Я не полагаю, что это возможно, так как это вне fooобъем. нечто будет только знать о своем внутреннем объеме, так как это могут называть бесчисленные другие модули и приложения.

3
ответ дан Soviut 26 November 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: