pythonfilecommand-lineprofilingcprofile

cProfile saving data to file causes jumbles of characters


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.


Solution

  • 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.