Форум сайта python.su
0
В твоем примере импортируемый модуль #samplemod.py а значит по условиям задачи если ЕГО импортируют то ОН и ТОЛЬКО ОН должен узнать (сам в себе) имя имтортера (скрипта который его импортирует), Скажем модуль ведет статистику кто и когда его вызывает…
Ты же запускаешь #main.py и в нем получаешь строку,,,
Офлайн
1
эта задача в общем виде не решается.
Офлайн
0
(
Офлайн
14
ПожарскийХорошо, лови
В твоем примере импортируемый модуль #samplemod.py а значит по условиям задачи если ЕГО импортируют то ОН и ТОЛЬКО ОН должен узнать (сам в себе) имя имтортера (скрипта который его импортирует), Скажем модуль ведет статистику кто и когда его вызывает…
Ты же запускаешь #main.py и в нем получаешь строку,,,
Отредактировано (Июнь 19, 2007 19:03:08)
Офлайн
0
) ты вероятно его не проганял;
File “/home/user/Desktop/imphook.py”, line 11, in my_import
callback(sys._getframe(1))
TypeError: ‘module’ object is not callable
Офлайн
14
ПожарскийСорри, поправил.
) ты вероятно его не проганял;
File “/home/user/Desktop/imphook.py”, line 11, in my_import
callback(sys._getframe(1))
TypeError: ‘module’ object is not callable
Офлайн
0
Спасибо, интересно. Но есть маленькое “не хорошо” наш модуль сможет узнать только те скрипты которые содержат import imphook. Все другие останутся им незамечены.
Офлайн
14
Нет, неправда.
imphook нужно один раз проинсталлировать - и все.
Есть и более продвинутые способы писать import hooks:
PEP-302, только их описывать дольше и сложнее
Отредактировано (Июнь 20, 2007 01:56:20)
Офлайн
0
Можно обойтись и без хука:
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)
Офлайн
14
Есть мелкая, но принципиальная разница.
Попробуй свой модуль дважды заимпортивовать.
Результат увидишь только один раз - первый.
Офлайн