Search code examples
pythonargparsedefault-value

Python: How to get all default values from argparse


When module optparse is used, then I can get all default values for all command line arguments like this:

import optparse

if __name__ == '__main__':
    parser = optparse.OptionParser(usage='pokus --help')
    parser.add_option("-d", "--debug", action='store_true', dest="debug",
                      default=False, help='Enabling debugging.')
    options, args = parser.parse_args()
    print(parser.defaults)

Since optparse is deprecated it is wise to rewrite your code to use argparse module. However I can't find any way how to get all default values of all command line arguments added to parser object:

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser(usage='pokus --help')
    parser.add_argument("-d", "--debug", action='store_true', dest='debug',
                        default=False, help='Enabling debugging.')   
    args = parser.parse_args()
    # <---- How to get default values for all arguments here?
    # Not: vars(args)

I want to get all default values when I run program with (./app.py -d) or without any command line argument (./app.py).


Solution

  • If you do not want to parse an empty input string, you can use the method get_default in the parser object:

    import argparse
    
    if __name__ == '__main__':
        parser = argparse.ArgumentParser(usage='pokus --help')
        parser.add_argument("-d", "--debug", action='store_true', dest='debug',
                            default=False, help='Enabling debugging.')   
        args = parser.parse_args()
    
        # To get a single default:
        d_default = parser.get_default('d')
    
        # To get all defaults:
        all_defaults = {}
        for key in vars(args):
            all_defaults[key] = parser.get_default(key)
    
        # Edit: Adding an alternative one-liner (using dict comprehension):
        all_defaults = {key: parser.get_default(key) for key in vars(args)}