Saya menjalankan shell python dari crontab setiap menit:
* * * * * /home/udi/foo/bar.py
/home/udi/foomemiliki beberapa subdirektori yang diperlukan, seperti /home/udi/foo/logdan /home/udi/foo/config, yang /home/udi/foo/bar.pymerujuk pada.
Masalahnya adalah crontabmenjalankan skrip dari direktori kerja yang berbeda, jadi mencoba membuka ./log/bar.loggagal.
Apakah ada cara yang bagus untuk memberitahu skrip untuk mengubah direktori kerja ke direktori skrip sendiri? Saya lebih suka solusi yang akan bekerja untuk lokasi skrip apa pun, daripada secara eksplisit memberitahu skrip di mana skrip itu berada.
EDIT:
os.chdir(os.path.dirname(sys.argv[0]))
Merupakan solusi elegan paling kompak. Terima kasih atas jawaban dan penjelasan Anda!
crontabuse-case: keduanyasys.argv[0]dan__file__gagal jika skrip dijalankan menggunakanexecfile();inspectsolusi berbasis bisa digunakan sebagai gantinya.