Форум сайта python.su
В твоем примере импортируемый модуль #samplemod.py а значит по условиям задачи если ЕГО импортируют то ОН и ТОЛЬКО ОН должен узнать (сам в себе) имя имтортера (скрипта который его импортирует), Скажем модуль ведет статистику кто и когда его вызывает…
Ты же запускаешь #main.py и в нем получаешь строку,,,
Офлайн
эта задача в общем виде не решается.
Офлайн
(
Офлайн
ПожарскийХорошо, лови
В твоем примере импортируемый модуль #samplemod.py а значит по условиям задачи если ЕГО импортируют то ОН и ТОЛЬКО ОН должен узнать (сам в себе) имя имтортера (скрипта который его импортирует), Скажем модуль ведет статистику кто и когда его вызывает…
Ты же запускаешь #main.py и в нем получаешь строку,,,
Отредактировано (Июнь 19, 2007 19:03:08)
Офлайн
) ты вероятно его не проганял;
File “/home/user/Desktop/imphook.py”, line 11, in my_import
callback(sys._getframe(1))
TypeError: ‘module’ object is not callable
Офлайн
ПожарскийСорри, поправил.
) ты вероятно его не проганял;
File “/home/user/Desktop/imphook.py”, line 11, in my_import
callback(sys._getframe(1))
TypeError: ‘module’ object is not callable
Офлайн
Спасибо, интересно. Но есть маленькое “не хорошо” наш модуль сможет узнать только те скрипты которые содержат import imphook. Все другие останутся им незамечены.
Офлайн
Нет, неправда.
imphook нужно один раз проинсталлировать - и все.
Есть и более продвинутые способы писать import hooks:
PEP-302, только их описывать дольше и сложнее
Отредактировано (Июнь 20, 2007 01:56:20)
Офлайн
Можно обойтись и без хука:
import sys
iname = ‘'
try:
raise RuntimeError
except:
t,v,tb=sys.exc_info()
iname = tb.tb_frame.f_back.f_globals.get(’__name__','???')
sys.exc_clear()
print iname
правда главный модуль будет обозначатся как ‘__main__’
Отредактировано (Июнь 28, 2007 04:58:47)
Офлайн
Есть мелкая, но принципиальная разница.
Попробуй свой модуль дважды заимпортивовать.
Результат увидишь только один раз - первый.
Офлайн