Erreur lors de la tentative d'écriture des informations cProfile dans un fichier
-
21-12-2019 - |
Question
J'essaie de charger un profil cProfile, de faire du tri et de peaufiner, puis d'afficher les résultats dans un fichier.Basé sur Documentation, je pensais pouvoir simplement passer un objet fichier et le print_stats
la fonction redirigerait vers ce flux.
Voici le code que j'essaie d'utiliser :
import sys,pstats
s = open('output.txt', 'w')
p = pstats.Stats('profile.dat', s)
et voici l'erreur résultante :
TypeError: Cannot create or construct a <class pstats.Stats at 0xbaa870> object from '<open file 'output.txt', mode 'w' at 0xb2ef60>''
Je dois également ajouter que lorsque je ne passe pas d'objet au paramètre stream, la sortie apparaît normalement dans le terminal.
La solution
En regardant le code source, vous devrez transmettre le fichier en tant que stream
argument de mot-clé (je ne comprends pas pourquoi il a été implémenté comme ça...), comme :
p = pstats.Stats('profile.dat', stream = s)
Voir ci-dessous le commentaire en ligne et le if "stream" in kwds
doubler.
class Stats:
"""..."""
def __init__(self, *args, **kwds):
# I can't figure out how to explictly specify a stream keyword arg
# with *args:
# def __init__(self, *args, stream=sys.stdout): ...
# so I use **kwds and sqauwk if something unexpected is passed in.
self.stream = sys.stdout
if "stream" in kwds:
self.stream = kwds["stream"]
del kwds["stream"]
if kwds:
keys = kwds.keys()
keys.sort()
extras = ", ".join(["%s=%s" % (k, kwds[k]) for k in keys])
raise ValueError, "unrecognized keyword args: %s" % extras
if not len(args):
arg = None
else:
arg = args[0]
args = args[1:]
self.init(arg)
self.add(*args)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow