首页 > 代码库 > 【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】 配置文件相对路径&软件自动执行的工作目录
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。