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)
这将获取脚本的文件名,将其转换为绝对路径,然后提取该路径的目录,然后更改为该目录。