2015-09-16 16 views
7

Come è possibile esaminare i valori degli argomenti delle funzioni all'interno della chiamata sys.settrace? Sembra che io abbia la possibilità di produrre praticamente tutto (righe, nomi di file, stacktraces, valori di ritorno, ecc.) Eccetto gli argomenti. C'è una soluzione che mi consenta di monitorare anche i valori degli argomenti delle funzioni?Argomenti della funzione di stampa in sys.settrace in python

risposta

9

È possibile utilizzare la combinazione di oggetti codice e oggetti frame.

Vedere per la descrizione di questi nello Python Data-Model Reference.

import sys 

def fn(frame, msg, arg): 
    if msg != 'call': return 
    # Filter as appropriate 
    if frame.f_code.co_filename.startswith("/usr"): return 
    print("Called", frame.f_code.co_name) 
    for i in range(frame.f_code.co_argcount): 
     name = frame.f_code.co_varnames[i] 
     print(" Argument", name, "is", frame.f_locals[name]) 

sys.settrace(fn) 

def hai(a, b, c): 
    print(a, b, c) 

hai("Hallo", "Welt", "!") 

La cosa importante da capire è che

  1. possiamo vedere tutte le variabili locali nel telaio come f_locals.
  2. Possiamo estrarre i nomi delle variabili nell'elenco parametri da f_code.co_varnames.
+0

E come stampare il valore di ritorno di ciascuna funzione tracciata? – river

+0

Per catturare i valori restituiti, selezionare 'msg == 'return'', come da [docs] (https://docs.python.org/3.5/library/sys.html#sys.settrace). Il valore restituito sarà in 'arg'. – marc

Problemi correlati