2012-12-28 16 views
16

Jak ograniczyć wartości opcji argparse?Ograniczanie wartości opcji wiersza poleceń

W poniższym kod sau opcja powinna przyjąć tylko pewną liczbę 0 lub 1 i bg powinno pozwolić tylko liczbę całkowitą. Jak mogę to wdrożyć?

import os 
import sys, getopt 
import argparse 

def main(): 
    parser = argparse.ArgumentParser(description='Test script') 
    parser.add_argument('-sau','--set',action='store',dest='set',help='<Required> Set flag',required=True) 
    parser.add_argument('-bg','--base_g',action='store',dest='base_g',help='<Required> Base g',required=True) 
    results = parser.parse_args() # collect cmd line args 
    set = results.set 
    base_g = results.base_g 

if __name__ == '__main__': 
    main() 
+1

nie maskować polecenie wbudowane: 'zadana = results.set' (ty zobacz kolor podświetlania składni) – eumiro

+0

Ponadto, jeśli jest to konieczne, argumenty nie powinny być flagami, ale argumentami pozycyjnymi. –

+0

sprawdź ten tutorial http://docs.python.org/howto/argparse – Tshepang

Odpowiedz

17

Można użyć type i choices argumenty add_argument. Aby akceptować tylko '0' i '1', to zrobiłbym:

parser.add_argument(…, choices=set("01")) 

I aby przyjmować tylko liczby całkowite, można zrobić:

parser.add_argument(…, type=int) 

pamiętać, że w wyborach, będziesz muszą podać opcje w typie określonym jako argument-typu. Tak aby sprawdzić całkowitymi i pozwolić tylko 0 i 1, można zrobić:

parser.add_argument(…, type=int, choices=set((0,1))) 

Przykład:

>>> import argparse 
>>> parser = argparse.ArgumentParser() 
>>> _ = parser.add_argument("-p", type=int, choices=set((0, 1))) 
>>> parser.parse_args(["-p", "0"]) 
Namespace(p=0)