Ich starte jede Minute eine Python-Shell von crontab:
* * * * * /home/udi/foo/bar.py
/home/udi/foohat einige notwendige Unterverzeichnisse, wie /home/udi/foo/logund /home/udi/foo/config, die sich /home/udi/foo/bar.pybeziehen.
Das Problem ist, dass crontabdas Skript in einem anderen Arbeitsverzeichnis ausgeführt wird, sodass der Versuch, es zu öffnen, ./log/bar.logfehlschlä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!
crontabAnwendungsfall: beidessys.argv[0]und__file__fehlgeschlagen, wenn das Skript mit ausgeführt wirdexecfile(); Stattdessen könnte eineinspectLösung auf Basis verwendet werden.