2013-08-20 26 views
12

Próbowałam nauczyć argparse.ArgumentParser prace i mam napisać kilka wierszy dla że:python przy użyciu metody argparse.ArgumentParser

global firstProduct 
global secondProduct 
myparser=argparse.ArgumentParser(description='parser test') 
myparser.add_argument("product1",help="enter product1",dest='product_1') 
myparser.add_argument("product2",help="enter product2",dest='product_2') 

args=myparser.parse_args() 

firstProduct=args.product_1 
secondProduct=args.product_2 

Chcę tylko, że gdy użytkownik uruchomić ten skrypt z 2 parametrami mój kod przypisuje je odpowiednio do firstProduct i secondProduct. Jednak to nie działa. Czy jest ktoś, kto mi powie, dlaczego? z góry dzięki

+2

Powinieneś opisać błąd, a nie tylko powiedzieć "to nie działa". Ważny jest komunikat o błędzie: "ValueError: dest dostarczony dwukrotnie dla argumentu pozycyjnego". odpowiedź unutbu na to. – hpaulj

Odpowiedz

11

Pomiń parametr dest podczas używania argumentu pozycyjnego. Nazwa dostarczone do pozycyjnego argumentem będzie nazwa argumentu:

import argparse 
myparser = argparse.ArgumentParser(description='parser test') 
myparser.add_argument("product_1", help="enter product1") 
myparser.add_argument("product_2", help="enter product2") 

args = myparser.parse_args() 
firstProduct = args.product_1 
secondProduct = args.product_2 
print(firstProduct, secondProduct) 

Running % test.py foo bar wydruki

('foo', 'bar') 
+0

wielkie dzięki. Oto jeszcze 2 pytanie. 1) pisanie produktu_1 z podwójnymi znakami lub pojedynczymi znakami różni się? 2) jaka jest różnica między argumentem pozycyjnym a innymi? – caesar

+2

Parametr 'dest' może być użyty z opcjami' optionsals' (zaczynającymi się od '-') – hpaulj

+2

(1) Nie ma różnicy w wyniku, jeśli określasz ciągi z pojedynczymi cytatami lub podwójnymi cudzysłowami. Posiadanie obu opcji po prostu pomaga w cytowaniu cytatów: na przykład '' '"lub" "" ". (2) Kiedy pierwszy argument na' add_argument' zaczyna się od '-' lub' - ", jest to opcjonalny argument Bez kreski jest argumentem pozycyjnym . Argumenty pozycyjne są rozpoznawane przez ich pozycję: 'test.py foo bar' interpretuje foo jako znajdujący się na pierwszej pozycji, więc jest powiązany z pierwszym argumentem pozycyjnym , "product_1" – unutbu

6

Oprócz unutbu's answer, można również użyć atrybutu metavar w celu przeznaczenia zmienna i nazwa zmiennej, która pojawia się w różnych menu pomocy, jak pokazano w this link.

Na przykład, jeśli zrobić:

myparser.add_argument("firstProduct", metavar = "product_1", help = "enter product1") 

Będziesz mieć argument dostępne dla Ciebie w args.firstProduct ale miał on wymieniony jako product_1 w pomocy.

Powiązane problemy