20

argparse を使用して、"arg=val" の形式のコマンド ラインを解析したいたとえば、使用法は次のようになります。

script.py conf_dir=/tmp/good_conf

それを達成するために、私はこれをやっています:

desc   = "details"
parser = argparse.ArgumentParser(description=desc, add_help=False)
args = parser.add_argument("conf_dir")
args = parser.parse_args("conf_dir=FOO".split())
args = parser.parse_args()
print args.conf_dir

しかし、問題は、スクリプトを次のように呼び出すと、次のようになることです。

python script.py conf_dir=/tmp/good_conf

私は得る:

conf_dir=/tmp/good_conf

私が期待するところ

/tmp/good_conf

質問は、argparse を使用して、名前と値のペアを含む cmd 行を解析できますか? ヒントはありますか?

編集: --conf_dir=/tmp/good_dir のようなものではなく、これを実行したい理由は、conf_dir=/tmp/good_dir スタイルの引数を使用する他のツール (他の言語で記述) があるためです。一貫性を維持するために、この方法で引数を解析する必要がありました。

4

4 に答える 4

27

カスタム アクションが必要です

class StoreNameValuePair(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        n, v = values.split('=', 1)
        setattr(namespace, n, v)

args = parser.add_argument("conf_dir", action=StoreNameValuePair)
于 2012-08-01T15:00:21.067 に答える
5

ドキュメントによると、そのargparseようなプレフィックスのないオプションをネイティブに使用することはできません。先頭の を省略する-と、位置引数を記述していると見なされ、次のように提供されることが期待されます。

python script.py /tmp/good_conf

オプションにしたい場合は、それを呼び出してフラグとして正しくマークする必要があり、--conf_dir次のようなスクリプトを呼び出します。

python script.py --conf_dir=/tmp/good_conf

ただし、名前と値のペアを受け入れるために、カスタム アクションを実装できます。と組み合わせるとnargs、このようなアクションは、任意の数の名前と値のペアを受け入れ、それらを引数解析結果オブジェクトに格納できます。

于 2011-03-01T13:09:05.223 に答える
1

コマンド ラインで名前と値のペアを指定する通常の方法は、オプションを使用することです。つまり、使用します

python script.py --confdir=/tmp/good_conf

argparse は確かにそのケースを処理できます。次のドキュメントを参照してください。

http://docs.python.org/library/argparse.html#option-value-syntax

于 2011-03-01T13:05:14.450 に答える