1. 程式人生 > 程式設計 >python使用訊號量動態更新配置檔案的操作

python使用訊號量動態更新配置檔案的操作

一種小技巧,可以讓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使用訊號量動態更新配置檔案的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。