Ini mungkin tampak seperti pertanyaan pemula, tetapi tidak. Beberapa pendekatan umum tidak berfungsi dalam semua kasus:
sys.argv [0]
Ini berarti menggunakan path = os.path.abspath(os.path.dirname(sys.argv[0]))
, tetapi ini tidak berfungsi jika Anda menjalankan dari skrip Python lain di direktori lain, dan ini bisa terjadi dalam kehidupan nyata.
__mengajukan__
Ini berarti menggunakan path = os.path.abspath(os.path.dirname(__file__))
, tetapi saya menemukan bahwa ini tidak berhasil:
py2exe
tidak memiliki__file__
atribut, tetapi ada solusinya- Ketika Anda menjalankan dari IDLE dengan
execute()
tidak ada__file__
atribut - OS X 10.6 di mana saya dapatkan
NameError: global name '__file__' is not defined
Pertanyaan terkait dengan jawaban yang tidak lengkap:
- Python - Temukan Path ke File Sedang Dijalankan
- Path ke file saat ini tergantung pada bagaimana saya menjalankan program
- Bagaimana cara mengetahui lintasan skrip yang berjalan dengan Python?
- Ubah direktori ke direktori skrip Python
Saya mencari solusi generik , yang akan bekerja di semua kasus penggunaan di atas.
Memperbarui
Ini adalah hasil dari testcase:
Output dari python a.py (di Windows)
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
pohon
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
menggunakan file dan ini bukan di dalam IDLE. Pikirkan yang__file__
didefinisikan hanya di dalam modul.