Pregunta

Estoy intentando cargar un perfil de cProfile, ordenar y perfeccionar un poco y luego enviar los resultados a un archivo.Basado en el documentación, pensé que podría simplemente pasar un objeto de archivo y el print_stats La función redirigiría a esa secuencia.

Aquí está el código que estoy intentando usar:

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

y aquí está el error resultante:

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

También debo agregar que cuando no paso un objeto al parámetro de flujo, la salida aparece normalmente en la terminal.

¿Fue útil?

Solución

Mirando el código fuente, tendrías que pasar el archivo como stream argumento de palabra clave (no me queda claro por qué se implementó así...), como:

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

Vea a continuación el comentario en línea y el if "stream" in kwds línea.

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top