Python 配置文件相对路径&软件自动执行的工作目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 配置文件相对路径&软件自动执行的工作目录相关的知识,希望对你有一定的参考价值。

  今天对监控脚本做了一些变更,然后突然发现监控全部都失效了。。排查了半天问题仍然不知所踪。最终发现居然是一个踩过好几次的老坑。。

  就是脚本内写的配置文件为了调试方便写成了相对路径,但是在上线时没有意识到软件自动执行(比如Zabbix的externalcheck,虽然所有脚本都可以放在统一的目录下,给人一种这个目录就是zabbix执行外部检查时的工作目录的错觉,但是实际上并不是。。)时自动执行的工作目录并不一定是当前目录。介于这个坑已经踩过多次,下面给出实例和解决办法:

import ConfigParser

cf = ConfigParser()
CONF_FILE = server.conf    #在本地写脚本时为了调试方便,在脚本同目录下创建了一个配置文件进行配置
cf.read(CONF_FILE)
#下面对CONF_FILE做一些处理

#同样的脚本,让zabbix自己去跑就报错了???然后登上目录自己手动执行,又没问题???就是路径的锅!
#把路径改成绝对路径就OK了
CONF_FILE = /usr/lib/zabbix/externalscripts/server.conf

  仔细想一下,这个锅其实也是ConfigParser这个模块本身的一个小“缺陷”吧。因为ConfigParser.ConfigParser().read(path)的时候,即便path不存在也不会报错。如果报错了的话,我们就可以很快定位问题了。所以切记切记,用ConfigParser之前一定要os.path.isfile(path)检查一下!

  

  如果想要保留配置文件和脚本在移植上的灵活性,可以这样搞:

work_dir = os.path.dirname(os.path.abspath(__file__))
CONF_FILE = os.path.join(work_dir,server.conf)
#这样就既可以保证CONF_FILE的绝对路径,又不会写死了。

  类似的这种操作写过很多次,就不再重复了。

以上是关于Python 配置文件相对路径&软件自动执行的工作目录的主要内容,如果未能解决你的问题,请参考以下文章

python文件读取&导包的绝对路径相对路径

python文件读取&导包的绝对路径相对路径

python文件读取&导包的绝对路径相对路径

Python3 & 如何在Python中写文件路径

autofs自动挂载

Python获取当前脚本文件夹(Script)的绝对路径