Python 3.3 では、必要なアクションのセットに対してparse_args
そのセットをチェックし、必要に応じてエラーを発行します。以前は、残りのリストをチェックして、エラー メッセージを表示していました。seen_actions
the following arguments are required...
positionals
too few arguments
したがって、新しいバージョンの場合、このスニペットはあなたが望むことをするはずです:
parser = argparse.ArgumentParser()
lat=parser.add_argument('lat', help="latitude")
lon=parser.add_argument('lon', help="longitude")
parser.add_argument('--method', help="calculation method (default: add)", default="add")
class MyAction(argparse._StoreTrueAction):
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, self.const)
lat.required = False
lon.required = False
parser.add_argument('--list-methods', help="list available methods", action=MyAction)
通常lat
、 とlon
は位置指定が必要ですが、--list...
アクションが実行されると、それらのアクションは不要になり、欠落していてもエラー メッセージは表示されません。
argparse をカスタマイズするもう 1 つの方法は、複数のパーサーを使用することです。この場合、1 つのパーサーを使用して--list-methods
オプションをチェックし、取得したパーサーに基づいて、ポジショナルを探す別のパーサーを呼び出すことができます。
parser1 = argparse.ArgumentParser(add_help=False)
parser1.add_argument('--list-methods', help="list available methods", action='store_true')
parser2 = argparse.ArgumentParser()
parser2.add_argument('lat', help="latitude")
parser2.add_argument('lon', help="longitude")
parser2.add_argument('--method', help="calculation method (default: add)", default="add")
parser2.add_argument('--list-methods', help="list available methods", action='store_true')
def foo(argv):
args,rest = parser1.parse_known_args(argv)
if not args.list_methods:
args = parser2.parse_args(argv)
return args
parser2
help コマンドに応答します。 parse_known_args
可能なものを解析し、残りをリストで返します。 引数としてparser2
受け取るように書き込むこともできます。rest, args