--arg1 value1
という形式の任意の引数セットをpythonスクリプトに渡して、{'arg1': 'value1}
の辞書でそれらを取得したいとします。私はそれを達成するためにを使いたいです。関数parse_known_args
は余分な引数を許しますが、単純なリストとして取り出すことができ、名前は付けられません。名前付き引数を持つPython parse_known_args
答えて
の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
任意のキーと値のペアを処理する問題は、何度も出てきています。にはそのためのメカニズムが組み込まれていません。最も単純おそらくと -
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
文字列として扱うことができます(私はそれを調べなければなりません)。
- 1. Pythonの名前付きデフォルトで任意の数の引数を持つ
- 2. Python 2.7のパラメータの後に名前付きのキーワード引数を持つクロージャ
- 3. pythonの名前付き引数の自動命名
- 4. ColdFusionで名前付き引数を持つコロンを使用する
- 5. Rubyの名前付きコマンドライン引数
- 6. Pythonの名前付き文字列フォーマットの引数
- 7. 名前付きパラメータを持つExpressjsルート
- 8. 名前付きパラメータを持つnhibernate hql
- 9. Rubyの名前付き引数(名前付きメソッドパラメータ、キーワード引数)の現在の状態は何ですか?
- 10. Groovyの名前付き引数とデフォルトの引数
- 11. 名前付き関数を持つ角度イベントハンドラー
- 12. 複数の値を持つ名前付きスコープ
- 13. 複数のStatefulService名前付きリスナーを持つFabricTransportServiceRemotingListenerタイプのレプリカリスナー
- 14. 名前付き引数をハイからpython関数に渡す方法
- 15. C#名前付き/ラベル付きの型を持つ辞書
- 16. 異なる名前で同じ引数を持つ関数
- 17. Pythonで関連する名前付き引数の任意の数をサポートするargparse
- 18. C#:同じ署名メソッド/コンストラクタと名前付き引数
- 19. VBA:名前付き引数が複数見つからない.Finds
- 20. 関数のデフォルトの引数と名前付き値
- 21. Rubyで数値を持つ変数の名前付け方法
- 22. 名前付き定数を持たない標準名
- 23. 名前付きのオプションの引数と複数の引数の順序
- 24. 名前付きキャプチャ2つのバリエーションを持つ正規表現
- 25. python/argparseから引数を取り除く(parse_known_argsを使わずに)
- 26. 検出%sの混合Pythonの補間の名前付きのプレースホルダを持つ
- 27. 名前付き引数をphantomjsファイルに渡すには
- 28. ValueError:名前付き引数(labels = ...、logits = ...、...)で `softmax_cross_entropy_with_logits`を呼び出す
- 29. デフォルトの引数を持つPython関数
- 30. 複数の引数を持つPythonマルチプロセッシング
あなたは単に 'add_argument'メソッドを使ってオプションを定義できます。 'parse_known_args'は、' add_argument'で定義された全てのオプションを解析し、残りのコマンドラインを返すメソッドですが、 'parse_args'を使うと引数が残っているとエラーになります。 – Bakuriu
余分な引数は、先験的に知られていない任意の名前/値で指定できます。 –
それから、 'argparse'は何をするべきかを知る機会がありません。それは 'parse_known_args'のポイントです:**あなた**は残った引数を手動で処理しなければなりません。 – Bakuriu