<div class="gmail_quote">Il giorno 18 settembre 2012 03:41, Walter Valenti <span dir="ltr"><<a href="mailto:waltervalenti@yahoo.it" target="_blank">waltervalenti@yahoo.it</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
<br>
><br>
> 2012/9/18 Giacomo Alzetta <<a href="mailto:giacomo.alzetta@gmail.com">giacomo.alzetta@gmail.com</a>>:<br>
>>  On Tuesday 18 September 2012 10:57:41 Walter Valenti wrote:<br>
>>>  C'è un modo pulito e veloce per tracciare le chiamate ai metodi di<br>
> una<br>
>>>  classe, a parte delle print ?<br>
><br>
> Questo sicuramente.<br>
><br>
> O magari intende "tracciare" nel senso dei vari trace del prolog o dei<br>
> linguaggi funzionali?<br>
><br>
<br>
</div>Intendo proprio loggare le chiamate Classe.metodo.<br>
<br>
Mi guarderò i logging.<br>
<span class="HOEnZb"><font color="#888888"><br>
Walter<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/mailman/listinfo/python</a><br>
</div></div></blockquote></div><br><div><br></div><div>Se intendi vedere quali linee vengono eseguite, linea per linea, puoi usare qualcosa di questo tipo:</div><div><br></div><div><br></div><div># copyright Giampaolo Rodola', license MIT</div>
<div>import sys, linecache</div><div><div><br></div><div>def tracethis(callback=None):</div><div>    """A decorator to trace a callable.</div><div><br></div><div>    >>> @tracethis()</div><div>    ... def foo():</div>
<div>    ...     ret = []</div><div>    ...     ret.append(range(10))</div><div>    ...     return ret</div><div>    ...</div><div>    >>> foo()</div><div>    __main__:5:     ret = []</div><div>    __main__:6:     ret.append(range(10))</div>
<div>    __main__:7:     return ret</div><div>    >>></div><div><br></div><div>    Example for logging traces of a certain module only:</div><div><br></div><div>    >>> def callback(name, lineno, line):</div>
<div>    ...     if name == __name__:</div><div>    ...         print "%s:%s: %s" % (name, lineno, line)</div><div>    ...</div><div>    >>></div><div>    >>> @tracethis(callback)</div><div>    ... def foo():</div>
<div>    ...     pass</div><div>    ...</div><div>    >>></div><div>    """</div><div>    def run(frame, event, arg):</div><div>        if event == "line":</div><div>            lineno = frame.f_lineno</div>
<div>            filename = frame.f_globals["__file__"]</div><div>            if (filename.endswith(".pyc") or</div><div>                filename.endswith(".pyo")):</div><div>                filename = filename[:-1]</div>
<div>            name = frame.f_globals["__name__"]</div><div>            line = linecache.getline(filename, lineno).rstrip()</div><div>            if callback is None:</div><div>                print "%s:%s: %s" % (name, lineno, line)</div>
<div>            else:</div><div>                callback(name, lineno, line)</div><div>        return run</div><div><br></div><div>    def outer(fun):</div><div>        def inner(*args, **kwargs):</div><div>            sys.settrace(run)</div>
<div>            try:</div><div>                return fun(*args, **kwargs)</div><div>            finally:</div><div>                sys.settrace(None)</div><div>        return inner</div><div><br></div><div>    return outer</div>
<div><br></div><div><br></div><div># test</div><div>if __name__ == '__main__':</div><div>    @tracethis()</div><div>    def foo():</div><div>        ret = []</div><div>        ret.append(range(10))</div><div>        return ret</div>
<div><br></div><div>    foo()</div></div><div><br></div><div><br></div><div>--- Giampaolo</div><div><a href="http://code.google.com/p/psutil/">http://code.google.com/p/pyftpdlib/</a></div><div><a href="http://code.google.com/p/psutil/">http://code.google.com/p/psutil/</a></div>
<div><a href="http://code.google.com/p/psutil/">http://code.google.com/p/pysendfile/</a></div>