Co minutę uruchamiam powłokę Pythona z crontaba:
* * * * * /home/udi/foo/bar.py
/home/udi/foo
ma pewne niezbędne podkatalogi, takie jak /home/udi/foo/log
i /home/udi/foo/config
, do którego /home/udi/foo/bar.py
odwołuje się.
Problem polega na tym, że crontab
uruchamia skrypt z innego katalogu roboczego, więc próba otwarcia ./log/bar.log
koń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!
crontab
przypadkiem 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ćinspect
rozwiązania opartego na rozwiązaniach .