следующие работы приятно видеть, что делает интерпретатор:трассировки выполнения путь питона переводчика
python -m trace --ignore-dir=$HOME/lib64:$HOME/lib:/usr -t path-to/script.py
Но есть слишком много строк. Я хотел бы скрыть строки, которые происходят при импорте файла.
Пример: Я не заинтересован в очередях, как это:
saved_filter.py(9): class SavedFilter(models.Model):
saved_filter.py(10): name = models.TextField(max_length=256)
saved_filter.py(11): user = models.ForeignKey('auth.User', null=True, blank=True)
я не мог найти решение в документации: https://docs.python.org/2/library/trace.html
Update Если есть другой способ, чтобы получить в результате, например, другой пакет python (а не трассировка), это было бы хорошим решением.
Обновление 2 Трассировка должна быть неинтерактивной.
Update 3
Я попробовал решение, предложенное Мартином v. Löwis. Он работает в некоторых случаях, но не для всех.
файл foo.py
import bar
def main():
f=bar.Foo()
f.my_func()
if __name__=='__main__':
main()
файл bar.py
class Foo(object):
def my_func(self):
def inner():
print('#in inner')
return 'inner'
print('#in my_func()')
inner()
return 1
Если я позвоню foo.py, разыскиваемый результат выглядит примерно так:
foo.py: е = bar.Foo() foo.py: f.my_func() bar.py: print ('# in my_func()') bar.py: internal() bar.py: print ('# in inner «) bar.py: возвращение 'внутренний' bar.py: возвращение 1
Результат trace2.py
> python tmp/trace2-orig.py --trace tmp/foo.py
--- modulename: foo, funcname: <module>
--- modulename: bar, funcname: <module>
--- modulename: bar, funcname: Foo
bar.py(1): class Foo(object): <======= Import lines
bar.py(2): def my_func(self):
--- modulename: foo, funcname: main
foo.py(4): f=bar.Foo()
foo.py(5): f.my_func()
--- modulename: bar, funcname: my_func
bar.py(3): def inner():
bar.py(6): print('#in my_func()')
#in my_func()
bar.py(7): inner()
--- modulename: bar, funcname: inner
bar.py(4): print('#in inner')
#in inner
bar.py(5): return 'inner'
bar.py(8): return 1
--- modulename: trace, funcname: _unsettrace
trace.py(80): sys.settrace(None)
К сожалению, есть еще class Foo(object)
что-то выполняется в процессе импорта.
Я предполагаю, что обнаружение загрузки и выполнения кода не распространяется на все случаи.
Попытайтесь собрать информацию по [Метод объекта трассировки] (https://docs.python.org/2/library/trace.html#trace.Trace.runctx), чтобы вызвать внутри вашего скрипта, чтобы собирать информацию о вашей целевой функции и напечатать данные [CoverageResults] (https://docs.python.org/2/library/trace.html#trace.CoverageResults) aftert hat. –