Co minutę uruchamiam powłokę Pythona z crontaba:
* * * * * /home/udi/foo/bar.py
/home/udi/fooma pewne niezbędne podkatalogi, takie jak /home/udi/foo/logi /home/udi/foo/config, do którego /home/udi/foo/bar.pyodwołuje się.
Problem polega na tym, że crontaburuchamia skrypt z innego katalogu roboczego, więc próba otwarcia ./log/bar.logkończy się niepowodzeniem.
Czy istnieje dobry sposób, aby powiedzieć skryptowi, aby zmienił katalog roboczy na własny katalog skryptu? Spodobało mi się rozwiązanie, które działałoby dla dowolnej lokalizacji skryptu, zamiast wyraźnie wskazywać skryptowi, gdzie on się znajduje.
EDYTOWAĆ:
os.chdir(os.path.dirname(sys.argv[0]))
Było najbardziej kompaktowym, eleganckim rozwiązaniem. Dziękuję za odpowiedzi i wyjaśnienia!
crontabprzypadkiem użycia: obasys.argv[0]i__file__kończą się niepowodzeniem, jeśli skrypt jest uruchamiany przy użyciuexecfile(); Zamiast tego można użyćinspectrozwiązania opartego na rozwiązaniach .