2012-08-01 28 views
7

मैंने पाया मैं इस पद्धति एक बहुत का उपयोग कर रहा है कि:ढेर में समारोह एक स्तर ऊपर की __FILE__ जाओ

os.path.join(os.path.dirname(__file__), file_path) 

तो मैं एक फ़ाइल में एक समारोह में डालने के लिए तय कर लिया है कि

def filepath_in_cwd(file_path): 
    return os.path.join(os.path.dirname(__file__), file_path) 

बात है, __file__वर्तमान फ़ाइल और इसलिए वर्तमान फ़ोल्डर देता है, और मैं पूरे मुद्दे नहीं छूटा है: कई ऐसे छोटे उपयोगिताओं है। मैं इस बदसूरत हैक कर सकता है (या बस पैटर्न लेखन के रूप में रखने के लिए):

def filepath_in_cwd(py_file_name, file_path): 
    return os.path.join(os.path.dirname(py_file_name), file_path) 

और फिर इसे करने के लिए कॉल इस तरह दिखेगा:

filepath_in_cwd(__file__, "my_file.txt") 

लेकिन मैं इसे अगर मैं पसंद करते हैं उस कार्य के __file__ को प्राप्त करने का एक तरीका था जो ढेर में एक स्तर ऊपर है। ऐसा करने का कोई रास्ता नहीं है?

उत्तर

9

यह करना चाहिए:

inspect.getfile(sys._getframe(1)) 

sys._getframe(1) फोन करने वाले फ्रेम हो जाता है, inspect.getfile(...) फ़ाइल नाम प्राप्त करता है।

+0

यह काम करता है! धन्यवाद... – phistakis