私はプログラムのすべてのオプションを印刷したいと思います。それらは読みやすくするためにグループ化されています。しかし、vars(args)
で引数にアクセスする場合、順序はランダムです。argparseの引数を定義した順序で取得する方法はありますか?
0
A
答えて
2
は(sys.argv[0]
がusage
でprog
値として使用される)sys.argv[1:]
の引数のリストを解析します。
args=parser.parse_args()
は、argparse.Namespace
オブジェクトを返します。 vars(args)
は、このオブジェクト(args.__dict__
)に基づいて辞書を返します。辞書のキーは順不同です。 print(args)
もこの辞書の順序を使用します。
パーサは、独自の簿記のために見た行動の記録を保持します。しかし、それはユーザーに公開されておらず、順序付けられていないset
です。そのインスタンスが使用された順序を記録したカスタムサブクラスAction
を定義すると思います。
パーサの作成時に定義された順序で引数を取り出すことができます。これは、parser
に_actions
のリストがすべてActions
であるためです。これはパブリックAPIの一部ではなく、基本的な属性であり、すべてが消滅する可能性は低いです。
In [622]: parser=argparse.ArgumentParser()
In [623]: parser.add_argument('foo')
In [624]: parser.add_argument('--bar')
In [625]: parser.add_argument('--baz')
In [626]: parser.print_help()
usage: ipython3 [-h] [--bar BAR] [--baz BAZ] foo
positional arguments:
foo
optional arguments:
-h, --help show this help message and exit
--bar BAR
--baz BAZ
使用方法とヘルプのリストが分離されているpositionals
とoptionals
ことを除いて、それが定義された順序で引数を示しています。
In [627]: args=parser.parse_args(['--bar','one','foobar'])
In [628]: args
Out[628]: Namespace(bar='one', baz=None, foo='foobar')
In [629]: vars(args)
Out[629]: {'bar': 'one', 'baz': None, 'foo': 'foobar'}
In [631]: [(action.dest, getattr(args,action.dest, '***')) for action in parser._actions]
Out[631]: [('help', '***'), ('foo', 'foobar'), ('bar', 'one'), ('baz', None)]
は、ここで私は_actions
リストに、各Action
についてdest
を取得し、args
名前空間からその値をフェッチ繰り返します。私はvars(args)
辞書からそれを取り出すこともできました。
アクションが名前空間に表示されないため、getattr
にデフォルトの***
を指定する必要がありました。私は、そのような種類の行動をディスプレイから除外することができました。
関連する問題
- 1. Pythonのargparseで--help -h引数をオーバーライドする方法はありますか?
- 2. argparse:定義されていない数の引数を取得する
- 3. 'ls'引数の確立順序はありますか?
- 4. カスタム定義コマンドで引数を取得する方法は?
- 5. XmlSerializerが定義された順序でxmlを出力する方法はありますか?
- 6. ファイル内にある順序でプロパティを取得する方法
- 7. 指定した順序でLinkedHashMapからKeySetを取得する
- 8. Talendでジョブの実行順序を定義する方法は?
- 9. 関数内で定義された変数から情報を取得する方法はありますか?
- 10. スクリプトで定義された定数だけを取得する方法はありますか?
- 11. 最初に不足している要素を順序付けられた順序で取得する効率的な方法はありますか?
- 12. ActiveRecord:正しい順序で値を取得:定義済み
- 13. Guiceのメソッドインターセプタの順序を定義する方法は?
- 14. argparseに引数を渡す方法がわかりません
- 15. 引数の順序を変更する方法は?
- 16. Djangoはコード順にそれらを取得、またはDjangoのモデルのフィールドの順序を設定する方法はあり順
- 17. &=と| =の定義された評価順序がありますか?
- 18. getopts関数で引数の順序を指定する方法は?上記テストの楽しみのために
- 19. jsonファイルのデータを特定の順序で取得する方法は?
- 20. トーチで定義された順序でテンソルをスライスする方法は?
- 21. BDB、指定された順序で主キーを取得する方法?
- 22. 同じ順序で座標を取得する方法は?
- 23. 正しい順序のパンダでvalue_counts()の戻り値を取得する方法
- 24. RestAssuredでフィルタの順序を強制する方法はありますか?
- 25. ジュリアでタプルの順序を逆にする方法はありますか?
- 26. 引数の順序はnumpy.apply_along_axis
- 27. 連想配列の要素を入力した順序と同じ順序で取得する方法
- 28. Rからユーザへの順序変数の取得方法Shiny
- 29. 乱れた順序で、$ Iから値を取得します
- 30. Netbeans 7 - tooldbarsの順序を定義する方法
argparseを考慮すると、それがPOSIX標準に準拠するように設計されているようなことは本当に疑わしいです。指定された順序は問題ではありません。あなたはおそらく 'sys.argv'を使ってそれを行うことができますが、それらは解析されません。 –
引数がコマンドラインで表示される順序や、 'add_argument'で作成される順序に興味がありますか? – hpaulj