Python argparse: Make at least one argument required

前端 未结 11 1729
谎友^
谎友^ 2020-12-13 01:39

I\'ve been using argparse for a Python program that can -process, -upload or both:

parser = argparse.ArgumentParser(de         


        
11条回答
  •  青春惊慌失措
    2020-12-13 01:48

    Maybe use sub-parsers?

    import argparse
    
    parser = argparse.ArgumentParser(description='Log archiver arguments.')
    subparsers = parser.add_subparsers(dest='subparser_name', help='sub-command help')
    parser_process = subparsers.add_parser('process', help='Process logs')
    parser_upload = subparsers.add_parser('upload', help='Upload logs')
    args = parser.parse_args()
    
    print("Subparser: ", args.subparser_name)
    

    Now --help shows:

    $ python /tmp/aaa.py --help
    usage: aaa.py [-h] {process,upload} ...
    
    Log archiver arguments.
    
    positional arguments:
      {process,upload}  sub-command help
        process         Process logs
        upload          Upload logs
    
    optional arguments:
      -h, --help        show this help message and exit
    $ python /tmp/aaa.py
    usage: aaa.py [-h] {process,upload} ...
    aaa.py: error: too few arguments
    $ python3 /tmp/aaa.py upload
    Subparser:  upload
    

    You can add additional options to these sub-parsers as well. Also instead of using that dest='subparser_name' you can also bind functions to be directly called on given sub-command (see docs).

提交回复
热议问题