首页 > 代码库 > 【Python】 配置文件相对路径&软件自动执行的工作目录

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

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

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

import ConfigParsercf = 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】 配置文件相对路径&软件自动执行的工作目录