Frage

Ich versuche, ein cProfile-Profil zu laden, etwas zu sortieren und zu verfeinern und dann die Ergebnisse in eine Datei auszugeben.Basierend auf Dokumentation, dachte ich, ich könnte einfach ein Dateiobjekt übergeben und das print_stats Die Funktion würde zu diesem Stream umleiten.

Hier ist der Code, den ich verwenden möchte:

import sys,pstats
s = open('output.txt', 'w')
p = pstats.Stats('profile.dat', s)

und hier ist der resultierende Fehler:

TypeError: Cannot create or construct a <class pstats.Stats at 0xbaa870> object from '<open file 'output.txt', mode 'w' at 0xb2ef60>''

Ich sollte auch hinzufügen, dass die Ausgabe im Terminal wie gewohnt erscheint, wenn ich kein Objekt an den Stream-Parameter übergebe.

War es hilfreich?

Lösung

Wenn Sie sich den Quellcode ansehen, müssten Sie die Datei als übergeben stream Schlüsselwortargument (mir ist nicht klar, warum es so implementiert wurde ...), wie:

p = pstats.Stats('profile.dat', stream = s)

Siehe unten den Inline-Kommentar und die if "stream" in kwds Linie.

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top