Найти - Пользователи
Полная версия: Как получить имя файла из которого был вызван модуль
Начало » Python для новичков » Как получить имя файла из которого был вызван модуль
1 2
k0st1an

В модуле m1 у меня есть метод log(). Этот метод через import я вызываю в модуле m2. Можно ли получить имя файла модуля m2 в модуле m1 (т.е. в методе)?

k0st1an

в модуле m1 надо вызвать вот это inspect.stack()[1][1]

PS: Какие-то безумные проблемы с редактором.... Код просто нереально вставить.

py.user.next
k0st1an
Можно ли получить имя файла модуля m2 в модуле m1 (т.е. в методе)?
Тут возникает вопрос, зачем это надо.
k0st1an

Таким образом я получаю имя модуля, которое потом вывожу на консоль (logging). Удобно, чтоб каждый раз не передавать что и где было, сразу понятно где искать.

doza_and
k0st1an
чтоб каждый раз не передавать что и где было, сразу понятно где искать.
Ума не приложу чем вам обычный traceback не угодил.

Ну в крайнем случае:

import traceback 
def f():
    traceback.print_stack()
f()

Кроме того встроенный logging вроде тоже успешно решает как эту задачу так множество других, которые вы в своем log рано или поздно опять начнете решать. Почему вы его не используете?
Посмотрите https://docs.python.org/2/library/logging.html#logrecord-attributes Ведь есть все что вам надо.
k0st1an
m1:
import logging
import traceback
def log(msg):
    f = '%(pathname)s | %(module)s | %(message)s'
    logging.basicConfig(format=f)
    logging.log(logging.WARNING, msg)
    print('='*30)
def log2():
    traceback.print_stack()
    print('='*30)

m2:
import m1
m1.log('TEST')
m1.log2()

$ python3 m2.py
/Users/k0st1an/develop/agent/m1.py | m1 | TEST
==============================
  File "m2.py", line 4, in <module>
    m1.log2()
  File "/Users/k0st1an/develop/agent/m1.py", line 14, in log2
    traceback.print_stack()
==============================

logging: я пробовал это использовать, но не подходит. traceback: есть имя модуля в первой строчке. Но по большому случаю какая разница как получить информацию? Что через inspect, что через traceback. В traceback еще много методов, но пока inspect проще парсить.
doza_and
k0st1an
Но по большому случаю какая разница как получить информацию?
Разница в том где меньше телодвижений, и где получается более общепринятый результат.
А “%exc_info” вас не устраивает?
k0st1an
doza_and
Разница в том где меньше телодвижений, и где получается более общепринятый результат.
А “%exc_info” вас не устраивает?
Я пока не понял как получить данные. %exc_info% - if no exception has occurred, None. Наверное нужно как-то хитро вызывать. Хочется стандарта, но пока отложил. Записал в TODO, в коде, а пока прёт пишу код…
Rodegast
> Удобно, чтоб каждый раз не передавать что и где было, сразу понятно где искать.
Не надо придумывать адовы костыли. Открой для себя отладчик / IDE.
k0st1an
Rodegast
Не надо придумывать адовы костыли. Открой для себя отладчик / IDE.
Мм… PyCharm юзаю. Да и причём тут это? Мне ведь не только во время отладки нужно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB