2015-04-14 24 views
5

Mam zasadniczo wykonywane następujące czynności:Jak można analizować plik utworzony za pomocą komendy pstats.dump_stats (filename) poza linią?

import cProfile, pstats, StringIO 
pr = cProfile.Profile() 
pr.enable() 
# ... my code did something ... 
pr.disable() 
s = StringIO.StringIO() 
sortby = 'cumulative' 
ps = pstats.Stats(pr, stream=s).sort_stats(sortby) 

ps.dump_stats('stats.dmp') # dump the stats to a file named stats.dmp 

Więc teraz mam plik o nazwie „stats.dmp” przechowywane w trybie offline.

Jak używać pstats do analizy tego pliku do spożycia przez ludzi?

Z góry dziękuję.

Odpowiedz

8

Oto, co odkryłem i wygenerowany przeze mnie program w języku Python. Przetestowałem to z plikiem .dmp wykonanym na Linuksie & analizowanym na Windows XP. Działało FINE. Plik Pythona ma nazwę "analyze_dmp.py".

#!/usr/local/bin/python2.7 
# -*- coding: UTF-8 -*- 
"""analyze_dmp.py takes the file INFILEPATH [a pstats dump file] Producing OUTFILEPATH [a human readable python profile] 
Usage: analyze_dmp.py INFILEPATH OUTFILEPATH 
Example: analyze_dmp.py stats.dmp stats.log 
""" 
import sys, os 
import cProfile, pstats, StringIO 

def analyze_dmp(myinfilepath='stats.dmp', myoutfilepath='stats.log'): 
    out_stream = open(myoutfilepath, 'w') 
    ps = pstats.Stats(myinfilepath, stream=out_stream) 
    sortby = 'cumulative' 

    ps.strip_dirs().sort_stats(sortby).print_stats(.3) # plink around with this to get the results you need 

NUM_ARGS = 2 
def main(): 
    args = sys.argv[1:] 
    if len(args) != NUM_ARGS or "-h" in args or "--help" in args: 
     print __doc__ 
     s = raw_input('hit return to quit') 
     sys.exit(2) 
    analyze_dmp(myinfilepath=args[0], myoutfilepath=args[1]) 

if __name__ == '__main__': 
    main() 
+0

To niesamowity prosty skrypt, który umożliwia zespołom łatwe udostępnianie zrzutów profilu. Dzięki! – zerocog