現在のプロジェクトでは、 pyxbを使用してxml構成ファイルを読み取っています。ただし、コマンドライン引数(argparseを使用して解析)を指定することにより、一部の設定をオーバーライドできるはずです。
より読みやすいコードを取得するために、ユニバーサルアプローチを使用して、更新メソッドを定義したいと思います。pyxbは割り当て時に新しい値を検証するため、パラメーターの更新ではtry-catch-blockを使用する必要があります(この場合、文字列をパターンと照合します)。
これが私が試したことです:
def override_setup(exp, args):
for param, arg in [[exp.param1, args.param1], [exp.param2, args.param2]]:
if arg is None:
continue
# this doesn't work, because param just references the string object referenced by exp.param1?
try:
param = arg
except Exception as e:
print e
# the following works
exp.param1 = "stuff"
pyxbパラメーターのargparseコマンドライン引数へのマッピングを含むリストを作成しています。これがすべてがうまくいかないところだと思います。
ある種のループを使用してこの更新を行う方法が必要です(したがって、すべての要素に対してtry-catch-blockを繰り返す必要はありません)。
残念ながら、expは反復可能ではないようです。expの各子には_getDiagnosticName()
、argparseによって読み取られた引数へのマッピングとして使用できる文字列を返すメンバーがあります。argparseの結果のdictを取得する方法を説明する記事
を見つけました。したがって、マッピング(pyxb要素-> argparse引数値)はもう問題ではありません。反復が問題です。
何か案は?