2016-12-18 14 views
2

Webから新しい変数値を更新する必要のあるモジュールが1週間に1回あります。これらの変数値をファイル&に配置すると、起動時にそれらの値がロードされます。あるいは、単純な解決策は、単にコードを自動更新することです。自己更新コード?

これは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週間以上経過しているかどうかを確認し、そうであれば新しいデータをフェッチしてから要求。私はconfig [ここ](https://github.com/textbook/atmdb/blob/master/atmdb/client.py)と同様のことをします。 – jonrsharpe

+0

データによってコードを動的に変更することは非常に珍しいことです。実行中のコードからデータを分離する必要があります。動的にインポートして実行できるコードがある場合は、Subprocessesを調べて、プログラムが別のプログラムを呼び出せるようにすることができます。モジュールを動的に書き直す場合は、コードを再度実行する必要があります。そのため、書き込み後にプログラムを再度呼び出す必要があります。その後、書き直されたハードコーディングされた値は、Python実行時に実際の変数に割り当てられます。しかし、これは非常にエキゾチックなやり方です。 – levilime

+0

コードを更新しないでください。いくつかの変数の値は、可能性があります。これを行う最善の方法は、ドキュメントがロードされてから10日後にサーバーに新しい値を問い合わせることができる場合に実行されるカウンタを使用することです。しかし真剣に私は、ドキュメントがロードされるたびにapiを呼び出し、常に最新の値を取得します。あなたの達成しようとしていることを伝えるのは難しいですが、それは私がやることです。データが非常に重くてお金を節約したいのでない限り。 – MadeInDreams

答えて

0

は、私はあなたが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) 
:彼らはあなたのアプリケーションによって取得される前に、生産に実行コンフィギュレーションへの更新を可能にするエンドポイントをロックダウンし、任意の設定値の更新を確認するためにいくつかの方法を持っている必要があります
関連する問題