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.
Dzięki za link Ross. Sprawdzę to teraz. –
Wygląda na to, że to właśnie było coś, czego szukałem. Trochę potrwa, aby dowiedzieć się, co dokładnie musi się stać w realizacji, ale to zdecydowanie rozwiązuje mój problem. –