Zauważyłem, że dokumentacja Python 2.7 zawiera jeszcze jeden moduł analizujący z wiersza poleceń. Oprócz getopt
i optparse
teraz mamy argparse
.
Dlaczego utworzono kolejny moduł analizujący z wiersza poleceń? Dlaczego powinienem go używać zamiast optparse
? Czy są jakieś nowe funkcje, o których powinienem wiedzieć?
Odpowiedzi:
Począwszy od Pythona
2.7
,optparse
jest on przestarzały i mam nadzieję, że odejdzie w przyszłości.argparse
jest lepszy ze wszystkich powodów wymienionych na oryginalnej stronie ( https://code.google.com/archive/p/argparse/ ):+
i/
Więcej informacji znajduje się również w PEP 389 , który jest narzędziem, dzięki któremu
argparse
trafił do standardowej biblioteki.źródło
optparse
w PEP, a następnie późniejsze argumenty o tym, jak skomplikowane jest dodanie, sprawia, że brzmi, jakby był zakodowany tak elastycznie jak rock (słabo).@ Odpowiedź Mikołaja obejmuje to dobrze, jak sądzę, ale nie bardziej „meta” pytanie, które zaczynasz:
To jest dylemat numer jeden, gdy do standardowej biblioteki dodaje się jakiś przydatny moduł: co robisz, gdy pojawia się znacznie lepszy, ale wstecznie niekompatybilny sposób na zapewnienie tego samego rodzaju funkcjonalności?
Albo trzymasz się starej i, co prawda, przewyższonej metody (zwykle, gdy mówimy o skomplikowanych pakietach: asyncore vs twisted, tkinter vs wx lub Qt, ...) albo masz wiele niezgodnych sposobów na zrobienie tego samego (XML parsery, IMHO, są jeszcze lepszym przykładem tego niż parsery wiersza poleceń - ale
email
pakiet w porównaniu z niezliczonymi starymi sposobami radzenia sobie z podobnymi problemami też nie jest zbyt daleko ;-).Możesz sprawiać, że groźne narzekanie w dokumentach mówi o „przestarzałych” starych sposobach, ale (dopóki musisz zachować kompatybilność wsteczną), tak naprawdę nie możesz ich zabrać bez zatrzymania dużych, ważnych aplikacji przed przejściem do nowszych wersji Pythona.
(Dylemat numer dwa, niezwiązany bezpośrednio z twoim pytaniem, jest streszczony w starym powiedzeniu: „w standardowej bibliotece jest miejsce, gdzie giną dobre pakiety” ... z wydaniami co półtora roku, pakietami niezbyt, bardzo stabilny, nie wymagający częstszych wydań, może w rzeczywistości znacznie ucierpieć z powodu „zamrożenia” w standardowej bibliotece ... ale to naprawdę inna kwestia).
źródło
parser.add_argument('--long-opt', '-l',...)
; „-” jest obsługiwane z łatwością i jak chcesz.Najlepszym źródłem uzasadnienia dla dodania do Pythona byłby PEP: PEP 389: argparse - Nowy moduł analizujący wiersz poleceń , w szczególności sekcja zatytułowana: Dlaczego getopt i optparse nie są wystarczające?
źródło
W bloku są też nowe dzieci!
Jeśli potrzebujesz bardziej szczegółowego porównania, przeczytaj to, a możesz skończyć używając docopt lub kliknij . Dzięki Kyle Purdon!
źródło
Na początku byłem tak niechętny jak @fmark, aby przejść z optparse na argparse, ponieważ:
Potem zobaczyłem ten dokument, argparse przewyższa optparse, szczególnie gdy mówię o generowaniu sensownego komunikatu pomocy: http://argparse.googlecode.com/svn/trunk/doc/argparse-vs-optparse.html
A potem zobaczyłem „ argparse vs. optparse ” autorstwa @Nicholas, mówiąc, że możemy mieć argparse dostępny w pythonie <2.7 (Tak, wcześniej tego nie wiedziałem).
Teraz moje dwie obawy zostały dobrze rozwiązane. Napisałem to z nadzieją, że pomoże innym o podobnym sposobie myślenia.
źródło