python argparse - either both optional arguments or else neither one

后端 未结 3 1288
耶瑟儿~
耶瑟儿~ 2020-12-29 04:25

I have a program that uses a default name and password. I\'m using argparse to allow the user to specify command line options, and I would like to enable the user to provid

3条回答
  •  失恋的感觉
    2020-12-29 04:59

    I believe that the best way to handle this is to post-process the returned namespace. The reason that argparse doesn't support this is because it parses arguments 1 at a time. It's easy for argparse to check to see if something was already parsed (which is why mutually-exclusive arguments work), but it isn't easy to see if something will be parsed in the future.

    A simple:

    parser.add_argument('-n','--name',...,default=None)
    parser.add_argument('-p','--password',...,default=None)
    ns = parser.parse_args()
    
    if len([x for x in (ns.name,ns.password) if x is not None]) == 1:
       parser.error('--name and --password must be given together')
    
    name = ns.name if ns.name is not None else "default_name"
    password = ns.password if ns.password is not None else "default_password"
    

    seems like it would suffice.

提交回复
热议问题