2016-09-07 6 views
-1

--arg1 value1という形式の任意の引数セットをpythonスクリプトに渡して、{'arg1': 'value1}の辞書でそれらを取得したいとします。私はそれを達成するために​​を使いたいです。関数parse_known_argsは余分な引数を許しますが、単純なリストとして取り出すことができ、名前は付けられません。名前付き引数を持つPython parse_known_args

+0

あなたは単に 'add_argument'メソッドを使ってオプションを定義できます。 'parse_known_args'は、' add_argument'で定義された全てのオプションを解析し、残りのコマンドラインを返すメソッドですが、 'parse_args'を使うと引数が残っているとエラーになります。 – Bakuriu

+0

余分な引数は、先験的に知られていない任意の名前/値で指定できます。 –

+0

それから、 'argparse'は何をするべきかを知る機会がありません。それは 'parse_known_args'のポイントです:**あなた**は残った引数を手動で処理しなければなりません。 – Bakuriu

答えて

2

の2つの引数と名前と値を使用し、これらの2つの引数を使用して辞書を更新するカスタムアクションを使用するオプションを定義することをお勧めします。代わりにmyscript --arg1 value1 --arg2 value2

class OptionAppend(Action): 
    def __call__(self, parser, namespace, values, option_string): 
     d = getattr(namespace, self.dest) 
     name, value = values 
     d[name] = value 

p.add_argument("-o", "--option", nargs=2, action=OptionAppend, default={}) 

その後、あなたはmyscript -o arg1 value1 -o arg2value1を記述し、そしてargs = parser.parse_args()後、あなたはargs.o == {'arg1': 'value1, 'arg2': 'value2'}を持っているでしょう。


これは、関連する変数のセット、代わりに個別に名前付き変数のセットを保持するために、リストや辞書の使用にやや似ています。

# Good 
v = [x, y, z] 
v = { 'key1': x, 'key2': y, 'key3': z} 
# Bad 
v1 = x 
v2 = y 
v3 = z 
0

任意のキーと値のペアを処理する問題は、何度も出てきています。​​にはそのためのメカニズムが組み込まれていません。最も単純おそらくと -

Is it possible to use argparse to capture an arbitrary set of optional arguments?(昨年5月からほとんど重複)parse_know_argsを使用して、独自の辞書がextrasからビルドすることの

あなたのアイデアが良いです。あなたがどのようにエクストラリストを扱うかは、あなたのユーザがどのくらいうまく行動しているかによって決まります('--key', 'value'の組み合わせが考えられます)。これは基本的にはsys.arv[1:]を直接解析した場合と同じです。

ユーザーが--options key1:value1 key2=value2 "key3 value3"のような入力を行った場合、カスタムアクションクラスでそのペアを解析できます(区切り文字などで文字列を分割するなど)。

--options "{key1: value1, key2: value2}"のような入力は、type=json.loadのようなタイプの機能を持つJSON文字列として扱うことができます(私はそれを調べなければなりません)。

関連する問題