Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 18, 2015 14:04:55

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

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



—-
memento mori

Отредактировано k0st1an (Сен. 18, 2015 14:06:16)

Офлайн

#2 Сен. 18, 2015 15:22:23

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

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

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



—-
memento mori

Офлайн

#3 Сен. 19, 2015 03:29:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

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



Офлайн

#4 Сен. 20, 2015 00:17:59

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

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



—-
memento mori

Офлайн

#5 Сен. 20, 2015 01:16:10

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

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

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

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

Кроме того встроенный logging вроде тоже успешно решает как эту задачу так множество других, которые вы в своем log рано или поздно опять начнете решать. Почему вы его не используете?
Посмотрите https://docs.python.org/2/library/logging.html#logrecord-attributes Ведь есть все что вам надо.



Отредактировано doza_and (Сен. 20, 2015 01:28:20)

Офлайн

#6 Сен. 20, 2015 13:36:10

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

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 проще парсить.



—-
memento mori

Офлайн

#7 Сен. 20, 2015 17:25:16

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

k0st1an
Но по большому случаю какая разница как получить информацию?
Разница в том где меньше телодвижений, и где получается более общепринятый результат.
А “%exc_info” вас не устраивает?



Офлайн

#8 Сен. 21, 2015 09:46:18

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

doza_and
Разница в том где меньше телодвижений, и где получается более общепринятый результат.
А “%exc_info” вас не устраивает?
Я пока не понял как получить данные. %exc_info% - if no exception has occurred, None. Наверное нужно как-то хитро вызывать. Хочется стандарта, но пока отложил. Записал в TODO, в коде, а пока прёт пишу код…



—-
memento mori

Офлайн

#9 Сен. 21, 2015 10:45:02

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

> Удобно, чтоб каждый раз не передавать что и где было, сразу понятно где искать.
Не надо придумывать адовы костыли. Открой для себя отладчик / IDE.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#10 Сен. 21, 2015 10:56:32

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Как получить имя файла из которого был вызван модуль

Rodegast
Не надо придумывать адовы костыли. Открой для себя отладчик / IDE.
Мм… PyCharm юзаю. Да и причём тут это? Мне ведь не только во время отладки нужно.



—-
memento mori

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version