自我更新代码?

时间:2016-12-18 13:46:47

标签: python python-3.x

我有一个模块,需要每周一次从网上更新新的变量值。我可以将这些变量值放在文件和文件中。在启动时加载这些值。或者,更简单的解决方案是简单地自动更新代码。

这在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

1 个答案:

答案 0 :(得分:1)

我建议您使用configparseran 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)