I am using cProfile on a module named bot4CA.py so in the console I type:
python -m cProfile -o thing.txt bot4CA.py
After the module runs and exits, it creates a file named thing.txt and when I open it, there is some information there, and the rest is a jumble of characters instead of a neatly organized file of data which is what I want. Does any one know how to use cProfile and end up with neatly organized table of data like when using it normally on command line, except in a file? Here's an example of some of the data in the .txt file:
{( s) build\bdist.win32\egg\colorama\winterm.pyi' t reset_all( i i gpàÂs% ?geOÙHÌœE?{( s- build\bdist.win32\egg\colorama\ansitowin32.pyi¥
What I really want is what happens when you invoke cProfile.run() which results in a neatly organized table printed showing the execution times of all the functions except instead of printed, saved in a file as this program is fairly large and runs a lot of functions.
You should use the pstats
module to parse this file and extract information in user-friendly format from it. For example:
import pstats
p = pstats.Stats('thing.txt')
p.sort_stats('cumulative').print_stats(10)
It's all in the documentation, of course. Go over the "instant user's manual" in there, it explains everything.
to dump the stats driectly:
echo 'stats' | python3 -m pstats path/to/cprofile_output_file
pstats also has a shell
$ python3 -m pstats path/to/cprofile_output_file
within we can issue stats
or sort
commands like so:
$ python3 -m pstats path/to/cprofile_output_file
Welcome to the profile statistics browser.
prof.txt% sort cumtime
prof.txt% reverse
prof.txt% stats
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 63:1(<module>)
1 0.000 0.000 0.000 0.000 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {built-in method builtins.print}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
prof.txt% ?
Documented commands (type help <topic>):
========================================
EOF add callees callers help quit read reverse sort stats strip
a micro-feature I enjoyed here is I get to reverse the sort order natively <3
echo -e 'sort cumtime\nreverse\nstats' | python3 -m pstats path/to/cprofile_output_file
The other answers are more powerful and flexible, but if you just want to get a quick output, use >
instead of -o
. That will save the report in plain text format.
python -m cProfile myscript.py > cprofile.txt
python -m cProfile bot4CA.py > thing.txt
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With