Ошибка при попытке записи информации cProfile в файл

StackOverflow https://stackoverflow.com//questions/23035229

  •  21-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь загрузить профиль cProfile, выполнить некоторую сортировку и обработку, а затем вывести результаты в файл.На основе документация, я думал, что могу просто передать файловый объект и print_stats функция будет перенаправляться на этот поток.

Вот код, который я пытаюсь использовать:

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

и вот результирующая ошибка:

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

Я также должен добавить, что когда я не передаю объект в параметр потока, вывод в терминале выглядит как обычно.

Это было полезно?

Решение

Глядя на исходный код, вам придется передать файл как stream аргумент ключевого слова (мне неясно, почему он был реализован именно так...), например:

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

См. ниже встроенный комментарий и if "stream" in kwds линия.

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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top