Tôi muốn xem cách tốt nhất để xác định thư mục script hiện tại trong python là gì?
Tôi phát hiện ra rằng, do nhiều cách gọi mã python, thật khó để tìm ra một giải pháp tốt.
Đây là một số vấn đề:
__file__
không được xác định nếu tập lệnh được thực thi vớiexec
,execfile
__module__
chỉ được định nghĩa trong các mô-đun
Trường hợp sử dụng:
./myfile.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('myfile.py')
(từ một tập lệnh khác, có thể được đặt trong một thư mục khác và có thể có một thư mục hiện tại khác.
Tôi biết rằng không có giải pháp hoàn hảo, nhưng tôi đang tìm cách tiếp cận tốt nhất để giải quyết hầu hết các trường hợp.
Cách tiếp cận được sử dụng nhiều nhất là os.path.dirname(os.path.abspath(__file__))
nhưng cách này thực sự không hiệu quả nếu bạn thực thi tập lệnh từ một cách khác exec()
.
Cảnh báo
Bất kỳ giải pháp nào sử dụng thư mục hiện tại sẽ thất bại, điều này có thể khác nhau dựa trên cách tập lệnh được gọi hoặc nó có thể được thay đổi bên trong tập lệnh đang chạy.
pathlib
giải pháp của Ron Kalian nếu bạn đang sử dụng python 3,4 trở lên: stackoverflow.com/a/48931294/1011724
python myfile.py
từ shell, nó hoạt động, nhưng cả hai :!python %
và :!python myfile.py
từ bên trong vim đều thất bại với Hệ thống không thể tìm thấy đường dẫn được chỉ định. Điều này khá khó chịu. Bất cứ ai có thể nhận xét về lý do đằng sau điều này và giải pháp tiềm năng?