Je lance un shell python depuis crontab toutes les minutes:
* * * * * /home/udi/foo/bar.py
/home/udi/foo
a quelques sous-répertoires nécessaires, comme /home/udi/foo/log
et /home/udi/foo/config
, qui /home/udi/foo/bar.py
fait référence à.
Le problème est que crontab
le script exécute à partir d'un répertoire de travail différent, donc essayer d'ouvrir ./log/bar.log
échoue.
Existe-t-il une bonne façon de dire au script de changer le répertoire de travail vers le propre répertoire du script? J'aurais envie d'une solution qui fonctionnerait pour n'importe quel emplacement de script, plutôt que d'indiquer explicitement au script où il se trouve.
ÉDITER:
os.chdir(os.path.dirname(sys.argv[0]))
C'était la solution élégante la plus compacte. Merci pour vos réponses et explications!
crontab
cas d' utilisation: les deuxsys.argv[0]
et__file__
échouent si le script est exécuté en utilisantexecfile()
;inspect
une solution à base de données pourrait être utilisée à la place.