我有一个偶尔需要重新加载的配置文件。 重新加载在一个在线程中运行的类的方法内调用。
我尝试使用globals()
执行此操作,但尽管print globals()
表明他们已更新程序但看不到更改。
我尝试在使用前添加global variableName
,但仍然没有。
之后我考虑使用__main__
因为我知道它有效,但我的问题是当我的变量名是从文件中读取的字符串时,我无法设置__main__
变量。
这是我的配置解析器:
def parse_config(path):
# grab config.ini
ini_file = open(root_path + path)
ini_contents = ini_file.read().replace('\r\n', '\n')
ini_file.close()
ini_list = filter(None, ini_contents.split("\n"))
ini_settings = [x for x in ini_list if not x.startswith('#')]
# loop config file lines and set variables
for line in ini_settings:
splits = line.split('=', 1)
name = splits[0].strip()
value = splits[1].strip()
value = value.replace('THIS/', root_path)
if value[0] == ':':
value = value[1:].split(',')
elif str(value).lower() == 'true':
value = True
elif str(value).lower() == 'false':
value = False
globals().update({name:value})
示例ini文件
# Path to folder where error logs get written
error_log_path = THIS/logs/
# Print in console (for debugging only)
logg_print = True
# Log to file
logg_write = True
logg_file_path = THIS/logs/
主要应用示例
class NotifyHandler():
def __init__(self):
m = threading.Thread(target=self.process_send)
m.setDaemon(True)
m.start()
def process_send(self):
while True:
parse_config('config.ini')
print logg_print
time.sleep(10)
NotifyHandler()
while True:
time.sleep(10)