IronPython: วิธีเข้าถึงการติดตามตัวแปรโลคัล

private ScriptEngine pe;
private ScriptScope scope;

private void button1_Click(object sender, EventArgs e)
{
    pe = Python.CreateEngine();
    scope = pe.CreateScope();

    pe.Runtime.SetTrace(OnTraceback);
    pe.Execute(@"
def square(x):
  s = x*x
  return s

a = square(2) + (3)
print ""hello world "" + str(a)
", scope);
}

private TracebackDelegate OnTraceback(TraceBackFrame frame, string result, object payload)
{
    //How can I access the local variables of the current function?

    return OnTraceback;
}

ฉันขอย้ำอีกครั้ง: ฉันต้องการรับตัวแปรในเครื่องของฟังก์ชัน ซึ่งการดำเนินการของ Python อยู่ในขณะนี้ (ฟังก์ชันที่อยู่รอบบรรทัด frame.f_lineno)


person ulrichb    schedule 09.10.2009    source แหล่งที่มา


คำตอบ (1)


คุณสามารถเข้าถึง frame.f_locals ซึ่งจะช่วยให้คุณรับ/ตั้งค่าตัวแปรทั้งหมดได้

person Dino Viehland    schedule 09.10.2009
comment
โปรดทำตามขั้นตอนโค้ดด้านบน ... frame.f_locals ไม่มี locals - person ulrichb; 10.10.2009
comment
ถ้าฉันเปลี่ยน OnTraceback ให้ส่งคืนตัวเอง ฉันเห็นคนในพื้นที่ภายในฟังก์ชันสแควร์ - แม้ว่า globals ดูเหมือนจะหายไปก็ตาม - person Dino Viehland; 10.10.2009