251

古いバージョンの Optparse は、認識されない引数をすべて無視して続行します。ほとんどの場合、これは理想的ではなく、argparse で変更されました。しかし、認識されていない引数を無視して、指定した引数を解析したい状況がいくつかあります。

例えば:

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()

$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar

とにかくこれを上書きすることはありますか?

4

3 に答える 3

441

交換

args = parser.parse_args()

args, unknown = parser.parse_known_args()

例えば、

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args, unknown = parser.parse_known_args(['--foo', 'BAR', 'spam'])
print(args)
# Namespace(foo='BAR')
print(unknown)
# ['spam']
于 2012-10-10T11:28:09.927 に答える
9

実際、 argparse はまだ「無視」してい_unrecognized_argsます。これらの「認識されない」引数がデフォルトのプレフィックスを使用しない限り、パーサーからの苦情はありません。

@anutbu の構成を使用しますがparse.parse_args()、次の引数を使用してプログラムを実行する場合は、標準を使用します。

$ program --foo BAR a b +cd e

この Namespaced データ コレクションを使用します。

Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')

デフォルトのプレフィックス-を無視したい場合は、ArgumentParser を変更して、+代わりに「認識された」引数に a を使用することを決定できます。

parser = argparse.ArgumentParser(prefix_chars='+')
parser.add_argument('+cd')

同じコマンドで

Namespace(_unrecognized_args=['--foo', 'BAR', 'a', 'b'], cd='e')

それをあなたのパイプに入れて、それを吸ってください=)

nJoy!

于 2012-11-28T02:19:36.513 に答える