我有一个模块,需要每周一次从网上更新新的变量值。我可以将这些变量值放在文件和文件中。在启动时加载这些值。或者,更简单的解决方案是简单地自动更新代码。
这在Python中是否可行?
像这样......
def self_updating_module_template():
dynamic_var1 = {'dynamic var1'} # some kind of place holder tag
dynamic_var2 = {'dynamic var2'} # some kind of place holder tag
return
def self_updating_module():
dynamic_var1 = 'old data'
dynamic_var2 = 'old data'
return
def updater():
new_data_from_web = ''
new_dynamic_var1 = new_data_from_web # Makes API call. gets values.
new_dynamic_var2 = new_data_from_web
# loads self_updating_module_template
dynamic_var1 = new_dynamic_var1
dynamic_var2 = new_dynamic_var2
# replace module place holders with new values.
# overwrite self_updating_module.py.
return
答案 0 :(得分:1)
我建议您使用configparser
和an ini-style file中的一组默认值。
ConfigParser类实现了一个基本的配置文件解析器 提供类似于您所发现的结构的语言 Microsoft Windows INI文件。您可以使用它来编写Python程序 最终用户可以轻松定制。
每当从web api端点更新配置值时,configparser
也允许我们将这些值写回配置文件。那就是说,小心!大多数人建议在构建/部署时而不是在运行时包含配置文件的原因是为了安全性/稳定性。您必须锁定允许更新生产中正在运行的配置的端点,并在应用程序检索之前验证任何配置值更新:
import configparser
filename = 'config.ini'
def load_config():
config = configparser.ConfigParser()
config.read(filename)
if 'WEB_DATA' not in config:
config['WEB_DATA'] = {'dynamic_var1': 'dynamic var1', # some kind of place holder tag
'dynamic_var2': 'dynamic var2'} # some kind of place holder tag
return config
def update_config(config):
new_data_from_web = ''
new_dynamic_var1 = new_data_from_web # Makes API call. gets values.
new_dynamic_var2 = new_data_from_web
config['WEB_DATA']['dynamic_var1'] = new_dynamic_var1
config['WEB_DATA']['dynamic_var2'] = new_dynamic_var2
def save_config(config):
with open(filename, 'w') as configfile:
config.write(configfile)
示例用法::
# Load the configuration
config = load_config()
# Get new data from the web
update_config(config)
# Save the newly updated configuration back to the file
save_config(config)