Bu acemi bir soru gibi görünebilir, ama değil. Bazı ortak yaklaşımlar her durumda işe yaramaz:
sys.argv [0]
Bu, kullanmak anlamına gelir path = os.path.abspath(os.path.dirname(sys.argv[0]))
, ancak başka bir dizindeki başka bir Python komut dosyasından çalıştırıyorsanız bu işe yaramaz ve bu gerçek hayatta olabilir.
__dosya__
Bu kullanmak anlamına gelir path = os.path.abspath(os.path.dirname(__file__))
, ancak bunun işe yaramadığını gördüm:
py2exe
bir__file__
niteliği yok, ancak bir geçici çözüm var- IDLE'den çalıştırdığınızda
execute()
hiçbir__file__
özellik yok - OS X 10.6'yı nereden edinebilirim
NameError: global name '__file__' is not defined
Eksik cevapları olan ilgili sorular:
- Python - Çalıştırılmakta Olan Dosya Yolunu Bul
- Geçerli dosyanın yolu, programı nasıl yürüttüğüme bağlı
- Python'da çalışan betiğin yolunu nasıl bilebilirim?
- Dizini bir Python betiğinin dizinine değiştirme
Ben yukarıdaki tüm kullanım durumlarda işe yarayacak genel bir çözüm arıyorum .
Güncelleme
İşte bir test çantasının sonucu:
Python a.py çıktısı (Windows'ta)
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")
alt dizin / 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
ağaç
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
kullanıyorum ve bu IDLE içinde değil. Bunun yalnızca modüllerin içinde tanımlandığını düşünün .__file__