Próbuję użyć argparse
analizować argumenty wiersza poleceń. Oto mój kod:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import argparse
def create_parser():
parser = argparse.ArgumentParser()
parser.add_argument("--allow_ips", nargs="*")
return parser
if __name__ == "__main__":
parser = create_parser()
namespace = parser.parse_args()
Kiedy skrypt jest wykonywany w ten sposób, argparse
narzeka na nierozpoznane argumenty.
./prog.py --allow_ips=192.168.0.10 192.168.0.11 192.168.0.12
Ale kiedy skrypt zostanie wykonany w ten sposób, argparse
jest spełniony.
./prog.py --allow_ips 192.168.0.10 192.168.0.11 192.168.0.12
Jak powinienem zmienić mój kod, aby "=" można było użyć na liście argumentów?
Odpowiedzi:
4 dla odpowiedzi № 1Według Dokumentacja argparse, przechodzący *
w nargs
argument oznacza
Wszystkie obecne argumenty wiersza polecenia są gromadzone na liście.
Kiedy wywołujesz swój program bez znak równości, wszystkie trzy adresy IP są uważane za część --allow_ips
argument; będą dostępne dla twojego programu na liście.
Kiedy wywołujesz swój program z znak równości, tylko pierwszy adres IP jest uważany za część --allow_ips
argument. argparse
następnie próbuje przeanalizować drugi i trzeci adres IP. Ale nie może, ponieważ twój program nie przyjmuje żadnych argumentów pozycyjnych. Więc argparse
zgłasza wyjątek.