I am trying to make a Python program that uses the argparse
module to parse command-line options.
I want to make an optional argument that can either be
Here is a solution that I think does everything you want:
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("-u", "--user-name", default="admin")
# Gather all extra args into a list named "args.extra"
parser.add_argument("extra", nargs='*')
args = parser.parse_args()
# Set args.user_name to first extra arg if it is not given and len(args.extra) > 0
if args.user_name == parser.get_default("user_name") and args.extra:
args.user_name = args.extra.pop(0)
print args
If you run myScript -u batman
or myScript --user-name=batman
, args.user_name
is set to 'batman'. If you do myScript batman
, args.user_name
is again set to 'batman'. And finally, if you just do myScript
, args.user_name
is set to 'admin'.
Also, as an added bonus, you now have all of the extra arguments that were passed to the script stored in args.extra
. Hope this helps.