LINUX.ORG.RU

Обертка для модуля

 ,


0

1

Всем привет!
Есть модуль, который представляет собой .pyd файл. Импортируется он через .pyc следующего содержания:

def __load():
	import imp, os, sys
	try:
		dirname = os.path.dirname(__loader__.archive)
	except NameError:
		dirname = sys.prefix
	path = os.path.join(dirname, 'modulename.pyd')
	mod = imp.load_dynamic(__name__, path)
__load()
del __load

В нем есть куча классов с кучей методов и просто функций в самом модуле.
Есть какой-нибудь трюк, чтобы обернуть весь модуль и отслеживать вызовы любого метода?

★★★★★

Ответ на: комментарий от Kilte

Подойдёт? https://pycallgraph.readthedocs.org/en/master/

Спасибо, почитаю, попробую. Наверное обломаюсь. У меня вообще исполняемый бинарник (py2exe), который все это запускает. А еще там используется трединг. Взять и заимпортировать всё это дело (кучу pyd), чтобы запустить из своего скрипта, пока не получилось. Оно импортируется и даже запускается, но падает достаточно быстро. Хотя в бинарнике ничего сложного:

import sys
from bigthing import main
main.go_go_go()

ls-h ★★★★★ ()
Последнее исправление: ls-h (всего исправлений: 1)
Ответ на: комментарий от Kilte

Подойдёт? https://pycallgraph.readthedocs.org/en/master/

А еще я прочитал сейчас что эту тулзу надо притормаживать, иначе уйдет в стандартные библиотеки и граф будет непомерным. А у меня из мест, куда я могу вклиниться только то, чего в первом сообщении описал.

ls-h ★★★★★ ()
Ответ на: комментарий от Virtuos86

https://docs.python.org/2.7/library/sys.html, функция settrace.

Спасибо, пробовал. Такое ощущение (судя по выведенному стеку через backtrace), что оно не трассирует те функции и методы, которые в скомпиленом виде в pyd'ах. Обнаруживается только то немногое, что есть в «исходниках» (кроме вышеописанного куска есть еще пару pyc) и стандартные функции.

ls-h ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.