Python argparse: nargs + или * в зависимости от предыдущего аргумента

Я пишу инструмент для запросов к серверу, и у меня есть небольшой код для анализа аргументов в самом верху:

# Parse arguments
p = argparse.ArgumentParser()
g = p.add_mutually_exclusive_group(required=True)
g.add_argument('--odam', dest='query_type', action='store_const',
        const='odam', help="Odamex Master query.")
g.add_argument('--odas', dest='query_type', action='store_const',
        const='odas', help="Odamex Server query.")
p.add_argument('address', nargs='*')
args = p.parse_args()

# Default master server arguments.
if args.query_type == 'odam' and not args.address:
    args.address = [
            'master1.odamex.net:15000',
            'master2.odamex.net:15000',
            ]

# If we don't have any addresses by now, we can't go on.
if not args.address:
    print "If you are making a server query, you must pass an address."
    sys.exit(1)

Есть ли лучший способ сделать это , желательно все внутри парсера? Эта последняя ошибка выглядит немного неуместно, и было бы неплохо, если бы я мог сделать nargs для адреса зависимым от того, передается ли --odam или --- odas. Я мог бы создать подпарсер, но это сделало бы справку немного странной, так как в ней не указывалась бы адресная часть команды.

9
задан AlexMax 6 November 2010 в 20:24
поделиться