Error al intentar escribir información de cProfile en un archivo
-
21-12-2019 - |
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.
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