Python argparse ignore unrecognised arguments
Replace
args = parser.parse_args()
with
args, unknown = parser.parse_known_args()
For example,
import argparseparser = argparse.ArgumentParser()parser.add_argument('--foo')args, unknown = parser.parse_known_args(['--foo', 'BAR', 'spam'])print(args)# Namespace(foo='BAR')print(unknown)# ['spam']
Actually argparse does still "ignore" _unrecognized_args
. As long as these "unrecognized" arguments don't use the default prefix you will hear no complaints from the parser.
Using @anutbu's configuration but with the standard parse.parse_args()
, if we were to execute our program with the following arguments.
$ program --foo BAR a b +cd e
We will have this Namespaced data collection to work with.
Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')
If we wanted the default prefix -
ignored we could change the ArgumentParser and decide we are going to use a +
for our "recognized" arguments instead.
parser = argparse.ArgumentParser(prefix_chars='+')parser.add_argument('+cd')
The same command will produce
Namespace(_unrecognized_args=['--foo', 'BAR', 'a', 'b'], cd='e')
Put that in your pipe and smoke it =)
nJoy!