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 配置文件相对路径&软件自动执行的工作目录的主要内容,如果未能解决你的问题,请参考以下文章