web-dev-qa-db-ja.com

名前付きコマンド引数の読み取り

argparseを使用して、特定の順序である必要のない名前付きコマンドライン引数を読み取ることはできますか? ドキュメント を閲覧しましたが、そのほとんどは提供された引数(--hなど)に基づいてコンテンツを表示することに焦点を合わせていました。

現在、私のスクリプトは、順序付けられた名前のない引数を読み取ります。

myscript.py foo-val bar-val

sys.argvを使用:

foo = sys.argv[1]
bar = sys.argv[2]

しかし、引数に名前を付けることで順序に依存しないように入力を変更したいと思います。

myscript.py --bar = bar-val --foo = foo-val

33
amphibient

オプションの引数 は次のように使用できます。

import argparse, sys

parser=argparse.ArgumentParser()

parser.add_argument('--bar', help='Do the bar option')
parser.add_argument('--foo', help='Foo the program')

args=parser.parse_args()

print args
print sys

次に、./prog --bar=bar-val --foo foo-valで呼び出すと、次のように出力されます。

Namespace(bar='bar-val', foo='foo-val')
['Untitled 14.py', '--bar=bar-val', '--foo', 'foo-val']

または、ユーザーがargparseがそれをビルドするのを助けたい場合:

 $ ./prog -h
usage: Untitled 14.py [-h] [--bar BAR] [--foo FOO]

optional arguments:
  -h, --help  show this help message and exit
  --bar BAR   Do the bar option
  --foo FOO   Foo the program
42
dawg

答えはyesです。 argparse documentation のクイックルックも同様に答えていたでしょう。

以下は非常に簡単な例です。argparseはより具体的なニーズに対応できます。

_import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', '-f', help="a random options", type= str)
parser.add_argument('--bar', '-b', help="a more random option", type= int, default= 0)

print(parser.format_help())
# usage: test_args_4.py [-h] [--foo FOO] [--bar BAR]
# 
# optional arguments:
#   -h, --help         show this help message and exit
#   --foo FOO, -f FOO  a random options
#   --bar BAR, -b BAR  a more random option

args = parser.parse_args("--foo pouet".split())
print(args)  # Namespace(bar=0, foo='pouet')
print(args.foo) # pouet
print(args.bar) # 0
_

もちろん、実際のスクリプトでは、コマンドラインオプションをハードコーディングせず、代わりにparser.parse_args()(引数なし)を呼び出します。 argparseが_sys.args_リストをコマンドライン引数として取るようにします。

このスクリプトは次の方法で呼び出すことができます。

_test_args_4.py -h  # prints the help message
test_args_4.py -f pouet  # foo="pouet", bar=0 (default value)
test_args_4.py -b 42  # foo=None, bar=42
test_args_4.py -b 77 -f knock  # foo="knock", bar=77
_

ドキュメントを読むことで、他の多くの機能を発見できます;)

15
Tryph