我每分钟从 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)
这将获取脚本的文件名,将其转换为绝对路径,然后提取该路径的目录,然后更改为该目录。
关于python:将脚本工作目录更改为脚本自己的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1432924/