python argparse with dependencies

后端 未结 2 2249
醉话见心
醉话见心 2021-02-19 21:25

I\'m writing a script which has 2 arguments which are mutually exclusive, and an option that only makes sense with one of those arguments. I\'m trying to set up argparse to fail

相关标签:
2条回答
  • 2021-02-19 21:58

    Add the usage argument when creating the parser:

    usage = "usage: whichboom [-h] [-s | [-h] [-s]] host"
    description = "Lookup servers by ip address from host file"
    parser = argparse.ArgumentParser(description=description, usage=usage)
    

    Source: http://docs.python.org/dev/library/argparse.html#usage

    0 讨论(0)
  • 2021-02-19 22:01

    You just have the argument groups mixed up. In your code, you only assign one option to the mutually exclusive group. I think what you want is:

    parser = argparse.ArgumentParser(description='Lookup servers by ip address from host file')
    parser.add_argument('host', nargs=1,
                help="ip address to lookup")
    main_group = parser.add_mutually_exclusive_group()
    mysql_group = main_group.add_argument_group()
    main_group.add_argument("-s", "--ssh", dest='ssh', action='store_true',
                default=False,
                help='Connect to this machine via ssh, instead of printing hostname')
    mysql_group.add_argument("-m", "--mysql", dest='mysql', action='store_true',
                default=False,
                help='Start a mysql tunnel to the host, instead of printing hostname')
    main_group.add_argument("-f", "--firefox", dest='firefox', action='store_true',
                default=False,
                help='Start a firefox session to the remotemyadmin instance')
    

    You could just skip the whole mutually exclusive group thing and add something like this:

    usage = 'whichboom [-h] [-s | [-h] [-s]] host'
    parser = argparse.ArgumentParser(description, usage)
    options, args = parser.parse_args()
    if options.ssh and options.firefox:
        parser.print_help()
        sys.exit()
    
    0 讨论(0)
提交回复
热议问题