यह एक नौसिखिया प्रश्न की तरह लग सकता है, लेकिन ऐसा नहीं है। कुछ सामान्य दृष्टिकोण सभी मामलों में काम नहीं करते हैं:
sys.argv [0]
इसका उपयोग करने का मतलब है path = os.path.abspath(os.path.dirname(sys.argv[0]))
, लेकिन यह काम नहीं करता है यदि आप किसी अन्य निर्देशिका में पायथन स्क्रिप्ट से चल रहे हैं, और यह वास्तविक जीवन में हो सकता है।
__FILE__
इसका उपयोग करने का अर्थ है path = os.path.abspath(os.path.dirname(__file__))
, लेकिन मैंने पाया कि यह काम नहीं करता है:
py2exe
एक__file__
विशेषता नहीं है , लेकिन एक समाधान है- जब आप IDLE से चलते हैं तो
execute()
कोई__file__
विशेषता नहीं होती है - ओएस एक्स 10.6 जहां मुझे मिलता है
NameError: global name '__file__' is not defined
अधूरे जवाब के साथ संबंधित प्रश्न:
- पायथन - फाइल रन होने के लिए पथ खोजें
- वर्तमान फ़ाइल का पथ इस बात पर निर्भर करता है कि मैं प्रोग्राम को कैसे निष्पादित करता हूं
- पायथन में चल रही स्क्रिप्ट का मार्ग कैसे जानें?
- निर्देशिका को पायथन स्क्रिप्ट की निर्देशिका में बदलें
मैं एक सामान्य समाधान ढूंढ रहा हूं , एक जो उपरोक्त सभी उपयोग के मामलों में काम करेगा।
अपडेट करें
यहाँ एक टेस्टकेस का परिणाम है:
अजगर के ओरेकल का उत्पादन (विंडोज पर)
a.py: __file__= a.py
a.py: os.getcwd()= C:\zzz
b.py: sys.argv[0]= a.py
b.py: __file__= a.py
b.py: os.getcwd()= C:\zzz
a.py
#! /usr/bin/env python
import os, sys
print "a.py: sys.argv[0]=", sys.argv[0]
print "a.py: __file__=", __file__
print "a.py: os.getcwd()=", os.getcwd()
print
execfile("subdir/b.py")
subdir / b.py
#! /usr/bin/env python
import os, sys
print "b.py: sys.argv[0]=", sys.argv[0]
print "b.py: __file__=", __file__
print "b.py: os.getcwd()=", os.getcwd()
print
पेड़
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
का उपयोग करना है और यह आईडीएलई के अंदर नहीं है। सोचें कि__file__
केवल मॉड्यूल के अंदर परिभाषित किया गया है।