Próbuję wprowadzić opcjonalny argument dla skryptu, który nie może przyjmować żadnych wartości ani 2 wartości, nic więcej. Czy możesz to zrobić za pomocą argparse?argparse - wymagająca 2 wartości lub żadnej dla opcjonalnego argumentu
# desired output:
# ./script.py -a --> works
# ./script.py -a val1 --> error
# ./script.py -a val1 val2 --> works
wersja 1 - przyjmuje wartości 0 lub 1:
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--action", nargs="?", const=True, action="store", help="do some action")
args = parser.parse_args()
# output:
# ./script.py -a --> works
# ./script.py -a val1 --> works
# ./script.py -a val1 val2 --> error
Wersja 2 - Akceptuje dokładnie 2 wartości:
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--action", nargs=2, action="store", help="do some action")
args = parser.parse_args()
# output:
# ./script.py -a --> error
# ./script.py -a val1 --> error
# ./script.py -a val1 val2 --> works
Jak połączyć te 2 różne wersje, dzięki czemu skrypt akceptuje 0 lub 2 wartości argumentu, ale odrzuca kiedy ma tylko jedną wartość?
tym rozwiązaniem "./script.py" działa tak samo jak "./script.py -a" – xgord
@ xgord: w obu przypadkach nie chciałbyś błędu. Chcesz błędu podczas używania './script.py -a foo' lub' ./script.py -a foo bar baz' i dłużej. –
@xgord: ta kontrola * nie * dotyczy postępowania z przypadkiem './Script.py', dotyczy tylko zgłoszenia błędu przy użyciu opcji' -a', ale z niepoprawną liczbą argumentów. Czego spodziewałeś się zamiast tego w tym przypadku? –