Điều này có vẻ giống như một câu hỏi của người mới, nhưng nó không phải là. Một số cách tiếp cận phổ biến không hoạt động trong mọi trường hợp:
sys.argv [0]
Điều này có nghĩa là sử dụng path = os.path.abspath(os.path.dirname(sys.argv[0]))
, nhưng điều này không hoạt động nếu bạn đang chạy từ một tập lệnh Python khác trong thư mục khác và điều này có thể xảy ra trong cuộc sống thực.
__tập tin__
Điều này có nghĩa là sử dụng path = os.path.abspath(os.path.dirname(__file__))
, nhưng tôi thấy rằng điều này không hoạt động:
py2exe
không có__file__
thuộc tính, nhưng có một cách giải quyết- Khi bạn chạy từ IDLE
execute()
mà không có__file__
thuộc tính - OS X 10.6 nơi tôi nhận được
NameError: global name '__file__' is not defined
Các câu hỏi liên quan với câu trả lời không đầy đủ:
- Python - Tìm đường dẫn đến tệp đang chạy
- Đường dẫn đến tệp hiện tại phụ thuộc vào cách tôi thực hiện chương trình
- Làm thế nào để biết đường dẫn của tập lệnh đang chạy trong Python?
- Thay đổi thư mục thành thư mục của tập lệnh Python
Tôi đang tìm kiếm một giải pháp chung , một giải pháp sẽ hoạt động trong tất cả các trường hợp sử dụng ở trên.
Cập nhật
Đây là kết quả của một testcase:
Đầu ra của python a.py (trên 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")
subir / 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ây
C:.
| a.py
\---subdir
b.py
NameError: global name '__file__' is not defined
bằng cách sử dụng tệp và đây không phải là trong IDLE. Hãy nghĩ rằng__file__
chỉ được định nghĩa bên trong các mô-đun.