i'd print options of program , grouped readability. when accessing arguments via vars(args), order random.
argparse parses list of arguments in sys.argv[1:] (sys.argv[0] used prog value in usage).
args=parser.parse_args() returns argparse.namespace object. vars(args) returns dictionary based on object (args.__dict__). keys of dictionary unordered. print(args) uses dictionary order.
the parser keeps record of seen-actions own bookkeeping purposes. not exposed user, , unordered set. can imagine defining custom action subclass recorded order in instances used.
it possible retrieve arguments in order in defined when creating parser. that's because parser has _actions list of actions. it's not part of public api, basic attribute , unlikely every disappear.
to illustrate:
in [622]: parser=argparse.argumentparser() in [623]: parser.add_argument('foo') in [624]: parser.add_argument('--bar') in [625]: parser.add_argument('--baz') in [626]: parser.print_help() usage: ipython3 [-h] [--bar bar] [--baz baz] foo positional arguments: foo optional arguments: -h, --help show message , exit --bar bar --baz baz the usage , listings show arguments in order defined, except positionals , optionals separated.
in [627]: args=parser.parse_args(['--bar','one','foobar']) in [628]: args out[628]: namespace(bar='one', baz=none, foo='foobar') in [629]: vars(args) out[629]: {'bar': 'one', 'baz': none, 'foo': 'foobar'} in [631]: [(action.dest, getattr(args,action.dest, '***')) action in parser._actions] out[631]: [('help', '***'), ('foo', 'foobar'), ('bar', 'one'), ('baz', none)] here iterate on _actions list, dest each action, , fetch value args namespace. have fetched vars(args) dictionary well.
i had give getattr default ***, because help action not appear in namespace. have filtered sort of action out of display.
Comments
Post a Comment