python:将脚本工作目录更改为脚本自己的目录

问题:

我每分钟从crontab运行一个python shell:

* * * * * /home/udi/foo/bar.py

 /home/udi/foo有一些必要的子目录,如/home/udi/foo/log/home/udi/foo/config/home/udi/foo/bar.py所指的。
问题是crontab从不同的工作目录运行脚本,所以尝试打开./log/bar.log失败。
有没有一个很好的方式来告诉脚本将工作目录更改为脚本自己的目录?我会想到一个可以用于任何脚本位置的解决方案,而不是明确地告诉脚本它在哪里。
 编辑:

os.chdir(os.path.dirname(sys.argv[0]))

是最紧凑的优雅解决方案。感谢您的回答和解释!

回答:

这将改变您当前的工作目录,以便打开相对路径将会起作用:

import os
os.chdir("/home/udi/foo")

但是,您询问如何更改Python脚本所在的任何目录,即使您不知道在编写脚本时将会是什么目录。为此,您可以使用os.path功能:

import os

abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)

这需要您的脚本的文件名,将其转换为绝对路径,然后提取该路径的目录,然后更改到该目录。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: python: Change the scripts working directory to the script’s own directory

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

46 − 40 =