Pertimbangkan yang berikut ini kode Python:
import os
print os.getcwd()
Saya menggunakan os.getcwd()
untuk mendapatkan file script's lokasi direktori. Ketika saya menjalankan script dari baris perintah itu memberi saya jalan yang benar sedangkan ketika saya jalankan dari script yang dijalankan oleh kode di Django lihat mencetak /
.
Bagaimana saya bisa mendapatkan path ke script dari dalam skrip yang dijalankan oleh Django lihat?
UPDATE:
Menyimpulkan jawaban sejauh ini - os.getcwd()
dan os.jalan.abspath()
keduanya memberikan direktori kerja saat ini yang mungkin atau mungkin tidak menjadi direktori tempat script berada. Di web host setup
hanya memberikan nama file tanpa jalan.__file__
Isn't ada cara di Python untuk (selalu) dapat menerima jalan di mana script berada?
Anda perlu untuk memanggil os.jalan.realpath
on __file__
, sehingga ketika __file__
adalah sebuah nama tanpa jalan anda masih mendapatkan dir path:
import os
print(os.path.dirname(os.path.realpath(__file__)))
Mencoba sys.jalan[0]
.
Mengutip dari Python docs:
Sebagai diinisialisasi pada program startup, item pertama dari daftar ini,
path[0]
, adalah direktori yang berisi script yang digunakan untuk menjalankan interpreter Python. Jika script di direktori ini tidak tersedia (misalnya jika penerjemah dipanggil secara interaktif atau jika naskah yang dibaca dari masukan standar),path[0]
adalah string kosong, yang mengarahkan Python untuk mencari modul-modul dalam direktori saat ini terlebih dahulu. Perhatikan bahwa script directory dimasukkan sebelum entri dimasukkan sebagai hasil dariPYTHONPATH
.
Saya gunakan:
import os
import sys
def get_script_path():
return os.path.dirname(os.path.realpath(sys.argv[0]))
Sebagai aiham poin di komentar, anda dapat menentukan fungsi ini dalam modul dan menggunakannya dalam skrip yang berbeda.
Kode ini:
import os
dn = os.path.dirname(os.path.realpath(__file__))
set "dn" untuk nama direktori yang berisi saat mengeksekusi script. Kode ini:
fn = os.path.join(dn,"vcb.init")
fp = open(fn,"r")
set "fn" untuk "script_dir/vcb.init" (di platform independen) dan terbuka yang file untuk membaca dengan saat mengeksekusi script.
Perhatikan bahwa "saat ini mengeksekusi script" ini agak ambigu. Jika anda keseluruhan program terdiri dari 1 naskah, maka yang's saat mengeksekusi script dan "sys.jalan[0]" solusi bekerja dengan baik. Tapi jika aplikasi anda terdiri dari script, yang mengimpor beberapa paket "P" dan kemudian memanggil script "B", maka "P. B" saat ini mengeksekusi. Jika anda perlu untuk mendapatkan di direktori yang berisi "P. B", anda ingin "os.jalan.realpath(__file__)
" solusi.
"__file__
" hanya memberikan nama saat ini pelaksana (top of stack) script: "x.py". Itu doesn't
memberikan info path. It's "os.jalan.realpath" panggilan yang melakukan kerja nyata.
Ini bekerja untuk saya (dan saya menemukan itu melalui ini stackoverflow pertanyaan)
os.path.realpath(__file__)
Berikut ini's apa yang saya berakhir dengan. Ini bekerja untuk saya jika saya mengimpor script di penerjemah, dan juga jika saya melaksanakannya sebagai script:
import os
import sys
# Returns the directory the current script (or interpreter) is running in
def get_script_directory():
path = os.path.realpath(sys.argv[0])
if os.path.isdir(path):
return path
else:
return os.path.dirname(path)
Ini thread lama tapi aku've telah mengalami masalah ini ketika mencoba untuk menyimpan file ke dalam direktori saat ini script di saat menjalankan script python dari cron job. getcwd() dan banyak jalan lain datang dengan direktori home anda.
untuk mendapatkan path absolut untuk script yang saya gunakan
directory = os.jalan.abspath(os.jalan.dirname(__file__))