2011-12-02 14 views
13

Mam funkcję:Python 2.7 argparse

def x(a,b,c)

Jak mogę zebrać zmiennej wartości z wiersza poleceń, które pasują do tego wzorca?

python test.py --x_center a --y_center b c (c ma, na przykład, 3, 4 lub więcej wartości)

+1

o co chodzi? –

Odpowiedz

39

można zrobić coś takiego jak to:

import argparse 

def x(x_center, y_center, values): 
    print "X center:", x_center 
    print "Y center:", y_center 
    print "Values:", values 

def main(): 
    parser = argparse.ArgumentParser(description="Do something.") 
    parser.add_argument('-x', '--x-center', type=float, required=True) 
    parser.add_argument('-y', '--y-center', type=float, required=True) 
    parser.add_argument('values', type=float, nargs='*') 
    args = parser.parse_args() 

    x(args.x_center, args.y_center, args.values) 

if __name__ == '__main__': 
    main() 

Wypróbuj:

$ python test.py --x-center 1 --y-center 2 3 4 5 
X center: 1.0 
Y center: 2.0 
Values: [3.0, 4.0, 5.0] 

Aby korzystać z the argparse module, zwykle musisz zacząć od funkcji main (i jakiegoś zestawu znaków, który ją wywołuje). W funkcji main będziesz potrzebować create an ArgumentParser. Potem będziesz chciał dodać kilka argumentów.

Aby dodać argument, należy użyć add_argument.

parser.add_argument('-x', '--x-center', type=float, required=True) 

Tutaj dodajemy opcję, -x, który ma także długą wariant opcji, --x-center. type przekazujemy do add_argument mówi, aby wymagać, aby był float (i błąd, jeśli nie jest prawidłowy float). Mówimy też argparse, że jest to wymagane; jeśli nie jest dostarczony, błąd.

parser.add_argument('values', type=float, nargs='*') 

To jest tak jak wcześniej, ale ponieważ ciąg przechodzimy do niego nie zaczyna się od myślnika, to zakłada, że ​​nie jest to możliwe, ale raczej argument nie będący opcją. Ponownie, mówimy, że chcemy float s. nargs pozwala ci określić, że wymaga więcej niż jednego argumentu. * określa, że ​​chcemy dowolnej ilości argumentów.

Wreszcie analizujemy wiersz poleceń pod numerem parse_args. Zwraca obiekt, który będziemy przechowywać.

Następnie można uzyskać dostęp do opcji i argumentów na tym obiekcie args i wykonać odpowiednie czynności w swoim programie.

+0

Wiersz x (args.x_center, args.y_center, args.values) musi się zmienić na x (args.x, args.y, args.values) w celu prawidłowego uruchomienia –

+0

@ VasiliosAntoniou: Jesteś tego pewien? ? Kod działa tak jak dla mnie, a wprowadzenie zmiany powoduje jego rozbicie. – icktoofay

+0

Tak, jestem pewien, ale to nie ma znaczenia. Przynajmniej oboje mamy działający kod! :) –