Eseguo una shell Python da crontab ogni minuto:
* * * * * /home/udi/foo/bar.py
/home/udi/foo
ha alcune sottodirectory necessarie, come /home/udi/foo/log
e /home/udi/foo/config
, a cui /home/udi/foo/bar.py
fa riferimento.
Il problema è che crontab
esegue lo script da una directory di lavoro diversa, quindi il tentativo di apertura ha ./log/bar.log
esito negativo.
C'è un bel modo per dire allo script di cambiare la directory di lavoro nella propria directory dello script? Vorrei una soluzione che funzionasse per qualsiasi posizione dello script, piuttosto che dire esplicitamente allo script dove si trova.
MODIFICARE:
os.chdir(os.path.dirname(sys.argv[0]))
Era la soluzione elegante più compatta. Grazie per le tue risposte e spiegazioni!
crontab
caso d'uso: entrambisys.argv[0]
e__file__
falliscono se lo script viene eseguito usandoexecfile()
;inspect
al suo posto potrebbe essere utilizzata una soluzione basata su .