2017-12-10 7 views
2

私は1日24時間稼働するPythonスクリプトを持っています。Python変数の値は別ファイルですか?

このスクリプトのモジュールは、スクリプトを停止したり、モジュールファイルを編集したりしなくても、変更したい変数の値を使用しています。スクリプトをもう一度起動してくださいできる)。

変数を別々のファイルに格納することを考えました。モジュールは、必要に応じてファイルから新しい値を取り出して使用します。

Pickleは解決策に見えましたが、人間が判読できないため、簡単に変更できません。たぶん、JSONファイル、またはもう一度インポートする別の.pyファイルですか?

私のためにもう1つの利点は、中断した場合(サーバの再起動など)、別のファイルからロードすると最新の変数値でスクリプトを再開できることです。

そうした方法をお勧めしますか?線に沿って

何か:

# variables file: 
variable1 = 10 
variable2 = 25 


# main file: 
while True: 
    import variables 
    print('Sum:', str(variable1+variable2)) 
    time.sleep(60) 

答えて

2

変数を持つテキストファイルを維持する簡単な方法は、YAML形式になります。そこにはいくつかの変数が複数ある場合は、ファイルが最近更新されたかどうかを確認するためにファイルディスクリプタをチェックするためには良いかもしれ

import yaml 
stream = open("vars.yaml", "r") 
docs = yaml.load_all(stream) 

を、そして唯一の再負荷変数:基本的には、それを使用する方法をThis answer explainsファイルの変更でした。スクリプトの中断を回避したいので、

import os 
last_updated = os.path.getmtime('vars.yaml') 

最後に、それだけで例外をスローし、死ぬのではなく、スクリプトはYAMLファイルのエラーをキャッチし、ユーザーに警告していてもいいかもしれません。しかし、「エラーは決して黙ってはいけません」と覚えておいてください。ここでの最善のアプローチは、ユースケースに依存します。

+0

スレッドセーフですか?私は、スクリプトがロードしている間にvars.yamlを更新する可能性は低いですが、それはうまく処理されるのでしょうか? – Fredovsky

関連する問題