If I have an argparser.ArgumentParser, plus a namespace returned from parser.parse_args, is there a simple way to convert the namespace back into a list of argv such that they could be passed back to the program? Essentially, is there an inverse function of parse_args?
An example scenario:
parser = argparse.ArgumentParser()
parser.add_argument('--example', type=int, default=0)
args = parser.parse_args(argv)
args.example *= 2
new_argv = parser.generate_argv(args)
So if I call:
python my_program.py --example 1
I would want back:
new_argv = ['--example', '2']
                I think this has been asked before, though I'm not sure of a good search term.
argparse - Build back command line (found by searching on argparse and sys.argv)
Before we get too far into this question, lets be clear.  args=parser.parse_args() is the same as args=parser.parse_args(sys.argv[1:]).  But I can imagine cases where you like to know what sys.argv[1:] would produce some arbitrary args.  Maybe for testing, maybe for driving someone else's code. 
There isn't any code in argparse that does this.  But for a limited set of cases you could take information from the defined Actions, and create a plausible sys.argv.
In [432]: parser = argparse.ArgumentParser()    
In [433]: parser.add_argument('--example', type=int, default=0)
Out[433]: _StoreAction(option_strings=['--example'], dest='example', nargs=None, const=None, default=0, type=<type 'int'>, choices=None, help=None, metavar=None)
The list of defined Actions:
In [435]: parser._actions
Out[435]: 
[_HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None),
 _StoreAction(option_strings=['--example'], dest='example', nargs=None, const=None, default=0, type=<type 'int'>, choices=None, help=None, metavar=None)]
select the one of interest, and look at some of its attributes:
In [436]: a1=parser._actions[-1]
In [437]: a1.type
Out[437]: int
In [438]: a1.default
Out[438]: 0
Now generate args:
In [439]: args=parser.parse_args(['--example','1'])    
In [440]: args
Out[440]: Namespace(example=1)
In [441]: args.example *= 2
A simple example of creating a list using the new args and information from the Action.  Obviously the working code needs to deduce which action to use.  For the most common types str() is enough.
In [442]: if args.example != a1.default:
   .....:     print(['--example',str(args.example)])
   .....:     
['--example', '2']
Or I could play with the metavar attribute, and the usage formatter:
In [445]: a1.metavar=str(args.example)
In [446]: parser.print_usage()
usage: ipython2.7 [-h] [--example 2]
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With