python使用信号量动态更新配置文件的操作
作者:Recar 发布时间:2023-02-25 08:43:18
一种小技巧,可以让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
修改配置文件 name为Recar
发起HUP信号
切到捕获的信号量看到重新更新了配置文件
这里我开始还有的 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的键不会减少
来源:https://blog.csdn.net/qq_28295425/article/details/90514428


猜你喜欢
- 每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢?pip安装sca
- 啥是依赖规范可以以各种形式指定项目的依赖项,取决于依赖项的类型以及安装项目可能需要的可选约束版本约束^ 约束编写规范允许的版本范围^1.2.
- 需求:需要实现一个用户反馈的接口,用户通过接口提交:1.一段文字2. 一个log文件3. 多个图片找了很多ModelForm,DRF-Ser
- 代码如下所示:表landundertake结构如下所示:表appraiser结构如下所示:access代码:TRANSFORM First(
- 用vue写业务代码时候,后端大神丢给我一堆数据,要求是做全选,反选功能,然后把用户更改的数据全部返回给他基本思路如果父级选中了,那么父级下面
- 本文实例讲述了Scrapy框架基本命令与settings.py设置。分享给大家供大家参考,具体如下:Scrapy框架基本命令1.创建爬虫项目
- 类的定义假如要定义一个类 Point,表示二维的坐标点:# point.pyclass Point: def __init__(
- 第一部分:UI界面设计界面效果图如下:ui文件(可拉动控件自行创建一个button和text)<?xml version="
- 一、条件分支语句:if基本格式:if (<表达式1>){ <语句组1>}else
- mysql 5.6对密码的强度进行了加强,推出了 validate_password 插件。支持密码的强度要求。安装办法:在配置文件中打开[
- 使用环境:人才网项目中有一个简历保密设置,其中有一个过滤关键词,只有某个企业的公司名中包含有其中的一个关键字,就不显示该份简历,当然,我还没
- 正则给header的冒号两边参数添加单引号(Python请求用)直接从浏览器Chrome复制header值如下:Host: kyfw.123
- PyQt5访问系统剪切板QClipboard类介绍QClipboard类提供了对系统剪切板的访问,可以在应用程序之间复制和粘贴数据,它的操作
- 作者:AngelGavin 出处:CSDNInternet Explorer 5.0 对 XML 提供哪个级别的支持?Inter
- 1. torch.utils.data.Datasetdatasets这是一个pytorch定义的dataset的源码集合。下面是一个自定义
- 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。 作用: 1。二
- 调用sklearn的model_selection时,发现sklearn中没有model_selection的模块。经过检查,发现anaco
- Python的创始人为荷兰人吉多·范罗苏姆 (Guido van Rossum)。 * 圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞
- 层次聚类算法顾名思义,层次聚类就是一层一层的进行聚类,可以由上向下把大的类别(cluster)分割,叫作分裂法;也可以由下向上对小的类别进行
- PyQt的文本操作的继承关系:QTextBrowser ( QtGui.QTextEdit)其中QTextEdit具有的功能函数:copy(