Piszę serwer zapytań narzędzia, a ja mam trochę kodu do analizowania argumentów na samej górze:Python argparse: nargs + lub * w zależności od wcześniejszego argumentu
# 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)
Czy istnieje ładniejszy sposób to zrobić, najlepiej wszystko w parserze? Ten ostatni błąd wygląda trochę nie na miejscu i byłoby miło, gdybym mógł zrobić nargs na adres, zależnie od tego, czy --odam czy --- odas zostanie przekazany. Mógłbym utworzyć parsektor, ale to sprawiłoby, że pomoc wyglądałaby trochę dziwnie, ponieważ zostawiłaby część adresu polecenia.
Dokładnie to, czego szukasz! – AlexMax
Prawdopodobnie bardziej sensowne wydaje się używanie [błędu parsera] (http://docs.python.org/library/argparse.html#argparse.ArgumentParser.error) zamiast 'sys.exit()' – Christoph
@ Christophoph: True; dzięki! – unutbu