2015-09-16 23 views
7

Sys.settrace çağrısının içindeki işlev argümanlarının değerlerini nasıl kontrol edebilirim? Ben argümanlar dışında hemen hemen her şeyi (satır, dosya isimleri, yığınlar, dönüş değerleri, vb.) Elde etme şansım var gibi görünüyor. Fonksiyon argüman değerleri de izlememi sağlayacak bir geçici çözüm var mı?python'da sys.settrace içindeki işlev argümanlarını yazdırma

cevap

9

Kod Nesneleri ve Çerçeve Nesneleri bileşimini kullanabilirsiniz.

Python Data-Model Reference'da bunlara ait açıklamalara bakın.

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", "!") 

gerçekleştirmek için en önemli şey

  1. biz f_locals olarak çerçeve içinde tüm yerel değişkenleri görebilirsiniz olmasıdır.
  2. Parametre listesindeki değişkenlerin isimlerini f_code.co_varnames'dan ayıklayabiliriz.
+0

Ve her izlenen işlevin dönüş değeri nasıl yazdırılır? – river

+0

Dönüş değerlerini yakalamak için, [docs] (https://docs.python.org/3.5/library/sys.html#sys.settrace) adresindeki 'msg == 'return' i işaretleyin. Döndürülen değer 'arg'de olacaktır. – marc

İlgili konular