Chciałbym użyć argparse
na Pythonie 2.7, aby jeden z parametrów skryptu był w zakresie od 0,0 do 1,0. Czy obsługuje to argparse.add_argument()
? ParametrJak mogę wymagać, aby argument mojego skryptu Pythona był zmiennoprzecinkowy między 0.0-1.0 używając argparse?
Odpowiedz
Parametr type
do musi być obiektem wywoływalnym, który pobiera ciąg znaków i zwraca wartość przekonwertowaną. Możesz napisać opakowanie o numerze float
, które sprawdza jego wartość i powoduje zgłoszenie błędu, jeśli jest poza zakresem.
def restricted_float(x):
x = float(x)
if x < 0.0 or x > 1.0:
raise argparse.ArgumentTypeError("%r not in range [0.0, 1.0]"%(x,))
return x
p = argparse.ArgumentParser()
p.add_argument("--arg", type=restricted_float)
Oto metoda, która wykorzystuje parametr add_argument
choices
, z niestandardowej klasy, który jest uważany za „równa się” do każdego pływaka w określonym zakresie:
import argparse
class Range(object):
def __init__(self, start, end):
self.start = start
self.end = end
def __eq__(self, other):
return self.start <= other <= self.end
parser = argparse.ArgumentParser()
parser.add_argument('--foo', type=float, choices=[Range(0.0, 1.0)])
Podoba mi się ten, ponieważ zostawia wyjątek podnosząc do argparse. Dzięki! –
Jedna z sugestii: niech twoja klasa 'Range' implementuje metodę' __contains__'; wtedy możesz powiedzieć 'choices = Range (0.0, 1.0)' zamiast owijać go na liście. – chepner
Podejście '__contains__' daje' ValueError: długość metawarowanej krotki nie pasuje do nargs' przy użyciu Pythona 3.4. W przeciwnym razie działa dobrze i zaimplementowałem '__repr__', aby zwrócić' '{0} - {1}' .format (self.start, self.end) 'dla ładniejszego tekstu pomocy. – RickardSjogren
- 1. Python argparse argument z cytatami
- 2. jak uczynić argument opcjonalnym w python argparse
- 3. Jak przekazać argument argparse do funkcji kwargs?
- 4. Jak mogę uzyskać argparse w Pythonie 2.6?
- 5. Jak przekazać słownik jako argument wiersza poleceń do skryptu Pythona?
- 6. Jak mogę wymagać aplikacji NumberHelper i sprawić, aby działała?
- 7. argparse: określ, który z akapitów był używany.
- 8. Jak wymagać, aby znacznik czasu był wyzerowany podczas sprawdzania poprawności w języku Python?
- 9. python argh/argparse: Jak mogę przekazać listę jako argument wiersza poleceń?
- 10. Jak przekazać argument tablicowy do skryptu Bash
- 11. argparse opcjonalny argument przed argumentem pozycyjnym
- 12. W jaki sposób jest wdrażana funkcja std :: map, aby wymagać, aby jej typ klucza był porównywalny?
- 13. Jak mogę uniknąć drukowania mojego skryptu R przy każdym uruchomieniu?
- 14. Jak mogę znaleźć Endian-ness mojego komputera programowo używając C?
- 15. Przekaż argument bash do skryptu python
- 16. wymagać albo z dwoma argumentami za pomocą argparse
- 17. Różnica między --default i --store_const w argparse
- 18. Jak uchwycić Wyprowadzenie Curl ze skryptu Pythona
- 19. Jak mogę zapewnić dobre pokrycie testowe mojego dużego projektu Pythona
- 20. python - Używając argparse, przekaż dowolny ciąg jako argument do użycia w skrypcie
- 21. Jak mogę sprawić, aby mój UIPickerView Multiline był szybki?
- 22. delegowania do skryptu Pythona
- 23. Wydrukuj przykład użycia programu z modułem argparse
- 24. python argparse: Jak mogę wyświetlić pomoc automatycznie po błędzie?
- 25. Jak mogę wymagać szablonu html z Browserify
- 26. Jak mogę wydrukować wszystkie argumenty przekazane do skryptu Pythona?
- 27. Jak mogę zainstalować moduły Pythona programowo/za pomocą skryptu Python?
- 28. Jak mogę wymagać określonej wersji rubinowego klejnotu?
- 29. Jak korzystać z argparse Pythona z predefiniowanym ciągiem argumentów?
- 30. Jak usunąć największe wiadomości e-mail z mojego konta Gmail za pomocą skryptu Pythona?
I był pierwotnie zamiar wybrać FJ-tych jako przyjętą odpowiedź, po prostu dlatego, że podoba mi się "czystość" tego (oczywiście dyskusyjna), ale prostota tego mnie podniosła i używam go w moim kodzie. Dzięki! –
Uwaga: 'restricted_float' powinno prawdopodobnie zostać zastąpione przez to, co reprezentuje, ponieważ będzie wyświetlane w komunikatach o błędach. Na przykład użyłem tego wzorca w zabawkowym projekcie ['geocodertools'] (https://pypi.python.org/pypi/geocodertools) i nazwał go' longitude' i 'latitude'. –