【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的绝对路径,又不会写死了。

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

时间: 2024-08-03 15:17:12

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

Python 配置文件加载且自动更新(watchdog)

安装依赖:pip install watchdog #!/usr/bin/env python3 # -*- coding: utf-8 -*- import logging import os import threading from configparser import ConfigParser, NoOptionError from watchdog.events import FileSystemEventHandler from watchdog.observers import

Linux自动执行任务

Linux自动执行任务 耗奇害死猫关注 2018.01.04 10:19:45字数 74阅读 142 单次执行用at和batch,周期性任务执行用crontab.任务执行结束后会将结果返回给发起人,通过邮件完成的.邮件位于:/var/spool/mail/user_name 单次执行任务:at,batch at at [OPTION]...TIME TIME表示方法: HH:MM[YYYY-mm-dd] noon(中午十二点),midnight(晚上十二点),teatime(下午四点) tomo

程序员带你十天快速入门Python,玩转电脑软件开发(二)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 上节课主要讲解了以下内容: 为什么学习Pyth

Python requests 自动登录某财BBS,自动签到打卡领铜钱,最后再配个plist,每天自动执行

某财的用户应该都知道这个网站,在"签到有礼"版块,每天会有一贴,用帖子中给出的关键字回帖,得铜钱,据说铜钱可以换现金,还可以换书. 真好,裸辞在家的失业人员最需要这个-每天领之. 基本思路: 先用抓包工具仔细分析下登陆以及回帖时post了哪些数据,这些数据从何而来(我用的Firefox + Firebug,挺好用的,选上保持+全部,就算页面重定向,所有的请求也都能看到): python requests库,用requests.Session().post来登陆和回帖,用get来读取页面

windows 10 如何设定计划任务自动执行 python 脚本?

我用 python 写了一些脚本,有一些是爬虫脚本,比如爬取知乎特定话题的热门问题,有一些是定期的统计分析脚本,输出统计结果到文档中.之前我都是手动执行这些脚本,现在我希望如何这些脚本能自动定时执行.那么,windows 10 操作系统如何定时自动执行 python 脚本? 我的设备是 windows 10操作系统,自带的"计划任务"可以满足我的需求,具体操作步骤,整理如下. 步骤1:打开 "计算机管理" 界面 点击电脑左下角的windows图标,或者键盘的wind

备份脚本及定时自动执行

1.首先自己建一个目录,我建的目录路径为/root/bak/bakmysql 建立目录步骤: cd /root(切换路径到root目录下)→mkdir bak(新建名称为bak的文件夹)→cd bak(进入bak目录下)→mkdir bakmysql(新建名为bakmysql的文件夹) 2.写备份脚本 #!/bin/bash ## 定义变量back_dir=/root/bak/bakmysqldate=$(date +%Y%m%d%H%M) ## 进入备份目录cd $back_direcho "

用C#实现C/S模式下软件自动在线升级

用C#实现C/S模式下软件自动在线升级 1 前言  长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序可维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素.有很多企业用户就是因为这个原因而放弃使用C/S.然而当一个应用必须要使用C/S结构才能很好的实现其功能的时候,我们该如何解决客户端的部署与自动升级问题?部署很简单,只要点击安装程序即可,难的在于每当有新版本发布时,能够实现自动升级.现在好

RHEL6.5安装multipath多路径软件

一.划zone(以博科光纤交换机为例) ①查看光纤交换机端口状态 RAC_SW_01:admin> switchshow Index Port Address Media Speed State Proto ================================================== 0 0 010000 id N8 Online FC F-Port 50:06:01:61:09:60:31:xx 1 1 010100 id N8 Online FC F-Port 10:

通过python 爬取网址url 自动提交百度

通过python 爬取网址url 自动提交百度 昨天同事说,可以手动提交百度这样索引量会上去. 然后想了下.是不是应该弄一个py 然后自动提交呢?想了下.还是弄一个把 python 代码如下: import os import re import shutil REJECT_FILETYPE = 'rar,7z,css,js,jpg,jpeg,gif,bmp,png,swf,exe' #定义爬虫过程中不下载的文件类型 def getinfo(webaddress): #'#通过用户输入的网址连接