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
とにかくこれを上書きすることはありますか?
交換
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']
残りの部分を使用する場合は、parser.add_argument('args', nargs=argparse.REMAINDER)
を使用して残りの部分を新しい引数に入れることができます。
実際、argparseは_unrecognized_args
をまだ「無視」します。これらの「認識されない」引数デフォルトのプレフィックスを使用しないであれば、パーサーから苦情は聞こえません。
次の引数でプログラムを実行する場合は、@ anutbuの設定を使用しますが、標準のparse.parse_args()
を使用します。
$ program --foo BAR a b +cd e
この名前空間のデータコレクションを使用します。
Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')
デフォルトのプレフィックス-
を無視したい場合は、ArgumentParserを変更し、代わりに「認識された」引数に+
を使用することにします。
parser = argparse.ArgumentParser(prefix_chars='+')
parser.add_argument('+cd')
同じコマンドが生成します
Namespace(_unrecognized_args=['--foo', 'BAR', 'a', 'b'], cd='e')
それをパイプに入れて吸ってください=)
nJoy!