python简述文件目录相对路径_【Python】 配置文件相对路径软件自动执行的工作目录...
今天對監(jiān)控腳本做了一些變更,然后突然發(fā)現(xiàn)監(jiān)控全部都失效了。。排查了半天問題仍然不知所蹤。最終發(fā)現(xiàn)居然是一個踩過好幾次的老坑。。
就是腳本內(nèi)寫的配置文件為了調(diào)試方便寫成了相對路徑,但是在上線時沒有意識到軟件自動執(zhí)行(比如Zabbix的externalcheck,雖然所有腳本都可以放在統(tǒng)一的目錄下,給人一種這個目錄就是zabbix執(zhí)行外部檢查時的工作目錄的錯覺,但是實際上并不是。。)時自動執(zhí)行的工作目錄并不一定是當前目錄。介于這個坑已經(jīng)踩過多次,下面給出實例和解決辦法:
importConfigParser
cf=ConfigParser()
CONF_FILE= 'server.conf' #在本地寫腳本時為了調(diào)試方便,在腳本同目錄下創(chuàng)建了一個配置文件進行配置
cf.read(CONF_FILE)#下面對CONF_FILE做一些處理
#同樣的腳本,讓zabbix自己去跑就報錯了???然后登上目錄自己手動執(zhí)行,又沒問題???就是路徑的鍋!#把路徑改成絕對路徑就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的絕對路徑,又不會寫死了。
類似的這種操作寫過很多次,就不再重復了。
■ 不要把配置文件驗證等鋪墊性工作放到if __name__ == "__main__"外面
今天又遇到這個坑了【抓狂】。。。。。。總結(jié)一下經(jīng)驗,發(fā)現(xiàn)配置文件驗證、腳本參數(shù)接受(sys.argv)這些工作 不要放在if __name__ == '__main__'的外面。在調(diào)試的時候可能報錯可以直接受到信息,但是在上線之后,其他程序調(diào)用這個腳本時可能并不會把報錯信息體現(xiàn)出來,然后我想加個日志功能吧,雖然考慮了所有裸在外面的語句的錯誤捕獲,又忽略了logging.basicConfig這個語句本身又是裸的,更啃爹的是這個語句也涉及到了配置文件,又寫了一個相對路徑,所以加了日志功能但也加了個bug【捂臉】。。。。。總之這條謹記吧。。以上。
總結(jié)
以上是生活随笔為你收集整理的python简述文件目录相对路径_【Python】 配置文件相对路径软件自动执行的工作目录...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python每日一练名片管理程序_Pyt
- 下一篇: python打包包含所有依赖_解决Pyt