Python cprofile имя файла: белья получить полный путь
Я использую cprofile
чтобы получить высокие правонарушители, однако filename:lineno
только перечисляет имя файла, но наличие пути к файлу было бы более полезно, чтобы быстро открыть этот путь. Особенно, если в разных иерархиях могут быть одинаковые имена модулей.
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 3.922 display.py:599 (show)
Есть ли возможность превратить это в полный путь?
3 ответа
Я предполагаю, что вы форматируете вывод с классом "pstats.Stats", и у вас есть:
stats = Stats(profiler)
stats.strip_dirs() # remove this
Если вы работаете с терминала, добавьте флаг -o:
python -m cProfile -o output.data your_script.py ...
Затем из консоли:
import pstats
ps = pstats.Stats('output.data')
ps.sort_stats(pstats.SortKey.CUMULATIVE).print_stats(20)
Вы должны получить такой результат:
Tue Oct 19 07:17:56 2021 output.data
18646457 function calls (18374990 primitive calls) in 30.760 seconds
Ordered by: cumulative time
List reduced from 22652 to 20 due to restriction <20>
ncalls tottime percall cumtime percall filename:lineno(function)
4321/1 0.037 0.000 30.796 30.796 {built-in method builtins.exec}
1 0.000 0.000 30.796 30.796 manage.py:1(<module>)
...
Кажется, нет встроенного способа, но вы можете сделать это:
import cProfile
import pstats
p = cProfile.Profile()
s = p.run("1+1")
pstats.Stats(s).sort_stats(2).print_stats()