Ich starte jede Minute eine Python-Shell von crontab:
* * * * * /home/udi/foo/bar.py
/home/udi/foo
hat einige notwendige Unterverzeichnisse, wie /home/udi/foo/log
und /home/udi/foo/config
, die sich /home/udi/foo/bar.py
beziehen.
Das Problem ist, dass crontab
das Skript in einem anderen Arbeitsverzeichnis ausgeführt wird, sodass der Versuch, es zu öffnen, ./log/bar.log
fehlschlägt.
Gibt es eine gute Möglichkeit, das Skript anzuweisen, das Arbeitsverzeichnis in das eigene Verzeichnis des Skripts zu ändern? Ich würde mir eine Lösung vorstellen, die für jeden Skriptstandort funktioniert, anstatt dem Skript explizit mitzuteilen, wo es sich befindet.
BEARBEITEN:
os.chdir(os.path.dirname(sys.argv[0]))
War die kompakteste elegante Lösung. Vielen Dank für Ihre Antworten und Erklärungen!
crontab
Anwendungsfall: beidessys.argv[0]
und__file__
fehlgeschlagen, wenn das Skript mit ausgeführt wirdexecfile()
; Stattdessen könnte eineinspect
Lösung auf Basis verwendet werden.