尝试将cProfile信息写入文件时出错

时间:2014-04-12 19:40:40

标签: python-2.7 cprofile pstats

我正在尝试加载cProfile配置文件,进行一些排序和finessing,然后将结果输出到文件。基于documentation,我想我可以简单地传递一个文件对象,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参数时,输出在终端中显示为正常。

1 个答案:

答案 0 :(得分:4)

查看源代码,您必须将该文件作为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)