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.

Était-ce utile?

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
scroll top