2011-11-20 14 views

Odpowiedz

63

Opcja store_true automatycznie tworzy domyślną wartość False.

Podobnie,będzie domyślnie True, gdy argument linii poleceń nie jest obecny.

Źródłem tego problemu jest zwięzłe i jasne: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861

The argparse docs nie są jasne w tej sprawie, więc będę aktualizować je teraz: http://hg.python.org/cpython/rev/49677cc6d83a

+1

Kilka uwag na ten temat. Po pierwsze, wydaje się, że jeśli opcja jest '-bar', to' dest' jest automatycznie ustawiane na 'bar', na podstawie http://hg.python.org/cpython/rev/49677cc6d83a. Jednak nie widzę, gdzie jest ustawione domyślne zachowanie w kodzie. Zawsze ustawiałem jawnie argument "dest". Ponadto, myślę, że ustawienie 'bar' domyślnego' dest' dla opcji '--bar' nie ma większego sensu, jeśli' --bar' to 'store_false'. Czy w tym przypadku 'not' nie powinien być' notbar'? –

5

Z

import argparse 
parser=argparse.ArgumentParser() 
parser.add_argument('-auto', action='store_true',) 
args=parser.parse_args() 
print(args) 

działa

% test.py 

daje

Namespace(auto=False) 

Więc wydaje się być przechowywanie False domyślnie .

-1

store_false faktycznie domyślnie 0 przez domyślny (możesz przetestować, aby zweryfikować). Aby zmienić domyślne ustawienia, dodaj do swojej deklaracji default=True.

Więc w tym przypadku: parser.add_argument('-auto', action='store_true', default=True)

+0

Nie wygląda to tak, jak w Pythonie 2.7 i 3.4: '>>> parser.add_argument ('- bar', action = 'store_false')' '_StoreFalseAction (option_strings = ['- bar '], dest =' bar ', nargs = 0, const = False, default = True, type = None, choices = None, help = None, metavar = None) ' ' >>> parser.parse_args ([]) ' ' Namespace (bar = True) ' – Leynos

+1

Przepraszam, to jest domyślne zachowanie systemu optparse. argparse powinien domyślnie odwrotność sklepu. to jest "store_false" domyślnie "True". –

Powiązane problemy