python使用信号量动态更新配置文件的操作


Posted in Python onApril 01, 2020

一种小技巧,可以让python捕获信号量HUP 然后当使用 kill 发起HUP信号量的时候 捕获到进行处理,可以处理为重新读取配置文件并重新赋值,这样不需要重启服务也可以让程序重新读取配置文件的内容

捕获信号量

import signal
import ConfigParser

def get_config():
 conf = ConfigParser.ConfigParser()
 conf.read("config.cfg")
 name = conf.get("test", "name")
 print(name)
 
def update_config(signum,frame):
 print("update config")
 get_config()

def ctrl_c(signum,frame):
 print("input ctrl c")
 exit(1)

# 捕获HUP
signal.signal(signal.SIGHUP, update_config)
# 捕获ctrl+c
signal.signal(signal.SIGINT, ctrl_c)

print("test signal")
get_config()

while True:
 pass

配置文件

$ cat config.cfg 
[test]
# name = "Recar"
name = "@@@"

执行程序 python

python使用信号量动态更新配置文件的操作

修改配置文件 name为Recar

发起HUP信号

python使用信号量动态更新配置文件的操作

切到捕获的信号量看到重新更新了配置文件

python使用信号量动态更新配置文件的操作

这里我开始还有的 from config import name

然后捕获信号量再重新导入,也就是再执行一下 from config import name

这样是不行的,如果想要重新导入需要 reload(模块) 但是这里reload不支持 from的形式

我改为 import config 然后在 自定义的信号量处理函数中 reload(config) 来实现重新载入模块。

还是推荐使用 ConfigParser 来获取配置文件好一些。

补充知识:python3-ConfigParser让配置文件生效

INI文件由节、键、值组成。格式如下:

例如:

[section]
name=value
name:value

注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。

configparser模块含有configparser类,主要包含三个模块:RawConfigParser(),ConfigParser()、SafeConfigParse()这三个方法(三选一),创建一个对象使用对象的方法对配置文件进行增删改查操作.

from configparser import ConfigParser
 
 if __name__ == "__main__": 
 
#写入数据到test.ini文件
 config=ConfigParser()
 config.add_section('login')
 config.set('login','name','test')
 config.set('login','paw','test')
 
 with open("test.ini",'w+') as f :
  config.write(f)
 
 
 with open("test.ini",'r') as f_read:
  config.read_file(f_read)
  print(config.get('login','name'))
  config.read(f_read)
  #获取section
  print(config.sections())
  #获取key
  print(config.get('login','name'))
  #获取value
  print(config.get('login','paw'))
  #获取某个section下的key,value
  print(config.options('login'))
  #判断section是否存在,存在返回True,不存在返回False
  print(config.has_section('login'))
  #方法判断section下,某个键是否存在,存在返回True,不存在返回False
  print(config.has_option('login','name1'))

删除

remove_section()方法删除某个section,remove_option()方法删除某个section下的键 config.remove_section('login','paw')

注:要先read到内存

config.read(file)

实际删除的为内存中的,文件中的section的键不会减少

以上这篇python使用信号量动态更新配置文件的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用成员运算符的示例
May 13 Python
Python numpy生成矩阵、串联矩阵代码分享
Dec 04 Python
基于Django用户认证系统详解
Feb 21 Python
python实现类之间的方法互相调用
Apr 29 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
Python安装及Pycharm安装使用教程图解
Sep 20 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
django正续或者倒序查库实例
May 19 Python
Pygame游戏开发之太空射击实战敌人精灵篇
Aug 05 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 #Python
python自动脚本的pyautogui入门学习
Apr 01 #Python
Python自动重新加载模块详解(autoreload module)
Apr 01 #Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 #Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
Apr 01 #Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 #Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 #Python
You might like
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
jquery属性过滤选择器使用示例
2013/06/18 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
python字符串反转的四种方法详解
2019/12/02 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
前台文员的岗位职责
2013/11/14 职场文书
冰峪沟导游词
2015/02/09 职场文书
先进工作者个人总结
2015/02/15 职场文书
奖励申请报告范文
2015/05/15 职场文书
地道战观后感500字
2015/06/04 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
2015大一新生军训感言
2015/08/01 职场文书
Tomcat用户管理的优化配置详解
2022/03/31 Servers
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers