Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Anda Boleh Menentukan Laluan Fail Pelaksanaan dalam Python dengan Amanah?

Bagaimanakah Anda Boleh Menentukan Laluan Fail Pelaksanaan dalam Python dengan Amanah?

DDD
DDDasal
2024-10-25 09:14:29967semak imbas

How Can You Reliably Determine the Execution File's Path in Python?

Menentukan Laluan Fail Pelaksanaan dalam Python

Pengenalan

Mengenal pasti laluan ke skrip Python yang sedang melaksanakan adalah aspek penting untuk pelbagai aplikasi. Walau bagaimanapun, mencari pendekatan "sejagat" yang berfungsi merentasi senario yang berbeza boleh menjadi mencabar. Artikel ini meneroka beberapa kaedah dan menangani batasan yang berkaitan dengannya, akhirnya membentangkan penyelesaian yang komprehensif.

Batasan Kaedah Tradisional

  • path = os.path.abspath(os. path.dirname(sys.argv[0])): Pendekatan ini gagal apabila skrip dilaksanakan daripada skrip lain dalam direktori lain melalui kaedah seperti execfile.
  • path = os.path.abspath(os.path.dirname(__file__)): Kaedah ini mungkin tidak berfungsi dalam kes di mana:

    • fail atribut tidak ada (mis. , pelaksanaan Py2exe)
    • Kod dilaksanakan daripada IDLE menggunakan execute()
    • fail tidak ditakrifkan (cth., Mac OS X v10.6)

Penyelesaian Komprehensif

Untuk mendapatkan laluan fail yang sedang dilaksanakan tanpa mengira konteks pelaksanaan, gabungan fungsi daripada modul inspect dan os boleh digunakan:

from inspect import getsourcefile
from os.path import abspath

path = abspath(getsourcefile(lambda:0))

Penyelesaian ini menyediakan pendekatan konsisten yang mendapatkan semula laluan fail sumber dalam pelbagai senario, termasuk:

  • Pelaksanaan langsung skrip utama
  • Pelaksanaan daripada skrip lain
  • Pelaksanaan dalam fungsi
  • Pelaksanaan dalam penterjemah (cth., IDLE)

Contoh Ujian

Memandangkan struktur direktori berikut:

C:.
|   a.py
\---subdir
        b.py

Dan kod dalam a.py:

#! /usr/bin/env python
import os, sys

print "a.py: os.getcwd()=", os.getcwd()
print

execfile("subdir/b.py")

Dan kod dalam subdir/b.py:

#! /usr/bin/env python
import os, sys

print "b.py: os.getcwd()=", os.getcwd()
print

Output python a.py ialah :

a.py: os.getcwd()= C:\
b.py: os.getcwd()= C:\zzz

Ini menunjukkan bahawa os.getcwd() mencerminkan direktori kerja konteks pelaksanaan, yang mungkin berbeza daripada lokasi skrip yang dilaksanakan. Sebaliknya, penyelesaian yang dicadangkan (abspath(getsourcefile(lambda:0))) secara konsisten menghasilkan laluan fail sumber skrip, tanpa mengira konteks pelaksanaan.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menentukan Laluan Fail Pelaksanaan dalam Python dengan Amanah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn