2012-12-27 9 views
6

Moim celem jest napisanie narzędzia wiersza polecenia Python za pomocą argparse, które ma wiele poleceń, z których każda ma różne zestawy wymaganych danych wejściowych.Python i argparse: jak zmieniać wymagane dodatkowe argumenty na podstawie pierwszego argumentu?

Próbowałem przeczytać przez dokumenty, kilka wyszukiwań w Google i przepełnienie stosu i nie mogłem znaleźć niczego. Mogę wymyślić kilka możliwych rozwiązań, ale są one brzydkie i wymagają ręcznej obsługi dokumentów pomocy i sprawdzania poprawności. Podejrzewam, że jest to rodzaj problemu ze wspólnym, skutecznym rozwiązaniem, które jest już wystarczająco dobrze znane, a ja po prostu brakuje odpowiednich terminów, aby go wyszukać, lub jest on dość niejasny z niewielkim marginesem, że nie jest publikowany w wiele miejsc.

Najlepszym pomysłem jaki mam teraz jest posiadanie jednego argumentu pozycyjnego, i jakoś mieć różne wymagania dla zestawu dodatkowych argumentów na podstawie wartości tego wejścia. Może sparsuję dwa razy?

Jako przykład, jest to podobny przypadek:

Jest jedna pozycyjna argumentem, zwierzę

opcje dla zwierząt są kota, jaszczurki, ryby

Dla kota argumenty pazury, wąsy, łapy są wymagane

Dla jaszczurki argumenty scale_color, favorite_food są wymagane

Dla ryb, water_type argumentów I s wymagane

Chcemy, aby wymagane dodatkowe argumenty dla każdej innej wartości zwierząt były udokumentowane w -h bez odwoływania się do nieortodoksyjnej praktyki.

Rozważałem wykonanie tego z opcjonalnym argumentem dla każdego z głównych wyborów kategorii. Jest to nieatrakcyjne, ponieważ narzędzie naprawdę chce tylko przyjąć jeden z tych argumentów, i jeśli mogę uniknąć ponownego wymyślenia koła pod względem wymuszania i dokumentowania tego, wolałbym.

mógłby zrobić coś takiego:

valid_commands = ['a','b','c','d','e','f','g'] 
parser.add_argument('command', choices = valid_commands) 
parser.add_argument('inputs', nargs = '*') 

Ale wtedy nie mam wejściowe dobre kontrole dodatkowych argumentów dla każdego wyboru poleceń.

Czy jest to normalny sposób? Na pewno dość powszechne jest pisanie narzędzia, które ma kilka możliwych poleceń i różne wymagane argumenty dla każdego. Zdecydowanie mógłbym uzyskać większość potrzebnej mi pomocy, dodając ręczne kontrole i dokumentację pomocy, ale to jest to, co prawdopodobnie zrobię wystarczająco wiele razy, że warto to zrobić za pierwszym razem.

Dzięki za przeczytanie i daj mi znać, czy mogę pomóc w dostarczeniu informacji.

Odpowiedz