Python argparse: command-line argument that can be either named or positional

前端 未结 3 2049
暗喜
暗喜 2021-01-02 03:20

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

3条回答
  •  春和景丽
    2021-01-02 04:00

    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.

提交回复
热议问题