web-dev-qa-db-fra.com

cProfile enregistrer des données dans un fichier provoque un mélange de caractères

J'utilise cProfile sur un module nommé bot4CA.py donc dans la console je tape:

python -m cProfile -o thing.txt bot4CA.py

Après l'exécution et la fermeture du module, il crée un fichier nommé thing.txt et lorsque je l'ouvre, il y a des informations et le reste est un mélange de caractères au lieu d'un fichier de données soigneusement organisé, ce que je veux. Est-ce que quelqu'un sait comment utiliser cProfile et se retrouver avec une table de données soigneusement organisée comme lorsque vous l'utilisez normalement en ligne de commande, sauf dans un fichier? Voici un exemple de certaines des données du fichier .txt:

{(   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¥

Ce que je veux vraiment, c'est ce qui se passe lorsque vous appelez cProfile.run (), ce qui entraîne une table bien organisée imprimée montrant les temps d'exécution de toutes les fonctions, sauf au lieu d'être imprimées, enregistrées dans un fichier car ce programme est assez grand et fonctionne beaucoup des fonctions.

43
joseph

Vous devez utiliser le module pstats pour analyser ce fichier et en extraire des informations dans un format convivial. Par exemple:

import pstats
p = pstats.Stats('thing.txt')
p.sort_stats('cumulative').print_stats(10)

C'est tout dans la documentation , bien sûr. Passez en revue le "manuel de l'utilisateur instantané", il explique tout.

62
Eli Bendersky

pour afficher les statistiques à la légère:

echo 'stats' | python3 -m pstats path/to/cprofile_output_file

pstats a également un Shell

$ python3 -m pstats path/to/cprofile_output_file

nous pouvons émettre des commandes stats ou sort comme ceci:

$ 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

une micro-fonctionnalité que j'ai appréciée ici est que je peux inverser l'ordre de tri en mode natif <3

echo -e 'sort cumtime\nreverse\nstats' | python3 -m pstats path/to/cprofile_output_file
24
ThorSummoner