<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>