2009-08-22 8 views
7

Piszę program w Pythonie, który akceptuje argumenty wiersza poleceń. Parsuję je z getopt (chociaż mój wybór getopt nie jest katolickim małżeństwem.) Jestem bardziej niż chętny do skorzystania z innej biblioteki). Czy istnieje sposób na określenie, że pewne argumenty muszą być podane, czy też muszę ręcznie upewnić się, że podano wszystkie argumenty?Jak mogę określić, że niektóre argumenty wiersza poleceń są obowiązkowe w Pythonie?

Edit: zmieniłem wszystkie instancje opcja do argumentem w odpowiedzi na publiczne oburzenie. Nie mów, że nie reaguję na ludzi, którzy mi pomagają :-)

+1

+1 za metaforę małżeństwa katolickiego. Uśmiechnęłam się. – Imagist

+1

"Opcja obowiązkowa" jest sprzeczna. Masz na myśli "argumenty". I - wygląda na to - masz na myśli "argumenty" ze składnią "opcji". Opcje/argumenty są ładnie zdefiniowane tutaj: http://docs.python.org/library/optparse.html#terminology i tutaj: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap12.html#tag_12_02 –

Odpowiedz

7

Najprostszym podejściem byłoby zrobienie tego samemu. To znaczy.

found_f = False 
try: 
    opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) 
except getopt.GetoptError, err: 
    print str(err) 
    usage() 
    sys.exit(2) 
for o, a in opts: 
    if o == '-f': 
     process_f() 
     found_f = True 
    elif ... 
if not found_f: 
    print "-f was not given" 
    usage() 
    sys.exit(2) 
+0

Szukałem sposobu, aby nie zrobić tego sam, ale jeśli nie ma, to myślę, że to jest odpowiedź. –

9

Jak dla mnie Wolę używając optparse module, jest dość silny, na exapmle może automatycznie generować -h wiadomość o podanych opcji:

from optparse import OptionParser 

parser = OptionParser() 
parser.add_option("-f", "--file", dest="filename", 
        help="write report to FILE", metavar="FILE") 
parser.add_option("-q", "--quiet", 
        action="store_false", dest="verbose", default=True, 
        help="don't print status messages to stdout") 

(options, args) = parser.parse_args() 

Należy ręcznie sprawdzić, czy podano wszystkie argumenty:

if len(args) != 1: 
     parser.error("incorrect number of arguments") 

Dokonywanie opcje obowiązkowe wydaje się dość dziwne dla mnie - są one nazywane opcje nie bez sens ...

+0

Jeśli wartość * musi * być podana, ale masz opcję, którą wartość podać, to nadal jest opcja, prawda? Jak nazwałbyś to? –

+0

Niestety, nie rozumiałem jeszcze celu tego. Czy możesz dać mi przykład, np. opisujące wejście Cli? Niezbędny jest dokładny problem, który rozwiązujesz, po prostu każdy ... –

+0

na pewno. Piszę skrypt, który działa na pliku. Jeśli nie określisz nazwy pliku, skrypt nie będzie wiedział, nad czym pracować, więc nazwa pliku jest obowiązkowa. –

Powiązane problemy