我每分钟都从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]))
是最简洁优雅的解决方案。谢谢你的回答和解释!
别这样。
不应将脚本和数据混入一个大目录中。将代码放在与数据分离的某个已知位置(
site-packages
或/var/opt/udi
或其他位置)。对代码使用良好的版本控制,以确保当前版本和以前的版本彼此分离,以便可以退回到以前的版本并测试将来的版本。底线:不要混淆代码和数据。
数据是宝贵的。代码来来往往。
提供工作目录作为命令行参数值。可以将默认值作为环境变量提供。不要推断(或猜测)
将其设置为必需的参数值并执行此操作。
不要根据软件的位置“假设”一个目录。从长远来看,不会有好结果的。
使用
sys.path[0]
可以得到较短的版本。来自http://docs.python.org/library/sys.html#sys.path
这将更改当前工作目录,以便打开相对路径:
但是,您询问了如何更改Python脚本所在的目录,即使您不知道在编写脚本时将是哪个目录。为此,可以使用
os.path
函数:这将获取脚本的文件名,将其转换为绝对路径,然后提取该路径的目录,然后更改为该目录。
相关问题 更多 >
编程相关推荐