2009-07-16 15 views
23

अन्य भाषाओं में मैं यह निर्धारित करने के लिए एक प्रतिबिंब एपीआई के माध्यम से वर्तमान फ्रेम प्राप्त कर सकता हूं कि मैं वर्तमान में किस क्षेत्र में स्थानीय हूं।पायथन में, मैं वर्तमान फ्रेम कैसे प्राप्त करूं?

क्या Python में ऐसा करने का कोई तरीका है?

+6

"पायथन निरीक्षण स्टैक फ्रेम" के लिए पहला Google परिणाम आपके इच्छित उत्तर देता है; http://docs.python.org/library/inspect.html – jrockway

उत्तर

33
import sys  
sys._getframe(number) 

वर्तमान फ्रेम के लिए संख्या 0 और फ्रेम के लिए 1 और इतने पर।

सबसे अच्छा परिचय मैं अजगर में फ्रेम करने के लिए मिल गया है का निरीक्षण मॉड्यूल के रूप में यह सबसे आम बातें आप फ्रेम के साथ क्या करना चाहते हैं करता है पर देखने के here

हालांकि है।

-3

dir फ़ंक्शन देखें।

क्षमा करें - वास्तव में फ्रेम के लिए प्रासंगिक नहीं है, लेकिन अभी भी उपयोगी है!

20

मैं डिबगिंग और प्रवेश के लिए इन छोटे लोगों का उपयोग करें:

import sys 

def LINE(back = 0): 
    return sys._getframe(back + 1).f_lineno 
def FILE(back = 0): 
    return sys._getframe(back + 1).f_code.co_filename 
def FUNC(back = 0): 
    return sys._getframe(back + 1).f_code.co_name 
def WHERE(back = 0): 
    frame = sys._getframe(back + 1) 
    return "%s/%s %s()" % (os.path.basename(frame.f_code.co_filename), 
          frame.f_lineno, frame.f_code.co_name) 
20

सर्वश्रेष्ठ उत्तर inspect मॉड्यूल का उपयोग करने के लिए हो सकता है; sys में एक निजी समारोह नहीं है।

import inspect 

current_frame = inspect.currentframe() 
+2

धन्यवाद। लेकिन एक बात ध्यान में रखना, उस लिंक से: "सीपीथन कार्यान्वयन विस्तार: यह फ़ंक्शन दुभाषिया में पाइथन स्टैक फ्रेम समर्थन पर निर्भर करता है, जो पाइथन के सभी कार्यान्वयन में मौजूद होने की गारंटी नहीं है। यदि पाइथन स्टैक फ्रेम समर्थन के बिना कार्यान्वयन में चल रहा है यह फ़ंक्शन कोई नहीं देता है। " – twasbrillig

संबंधित मुद्दे