Obecnie używam argparse do analizowania argumentów i zapisywania flag jako opcji boolowskich. Następnie sprawdzam, która flaga jest ustawiona na true i wykonuje tę funkcję. Argparse analizuje plik wejściowy, który jest otwierany i przekazywany do wywoływanej funkcji jako argument.argparse wywołanie funkcji po analizie innych opcji
Więc:
parser.add_argument('input_data', action='store', help='some help')
parser.add_argument('outputname', action='store',default=None, help='some help')
parser.add_argument('--flag','-f', action='store_true', dest='flag', default=False, help='help!')
muszę otworzyć input_data czytać informacje z nim zanim funkcja flaga jest tzw. To jest obecnie realizowany jako:
if args.flag == True:
array_out = flag(array_read_from_input)
if args.outputname == None:
name = 'Flag.tif'
Możliwe jest subclass argparse mieć kluczowe działanie wywołać funkcję.
Czy można przeanalizować opcję input_data, wykonać trochę przetwarzania, a następnie wywołać funkcję flag bez zagnieżdżania się w pętli dla każdego argumentu, np. Poprzez podklasowanie parametru działania argparse?
Nie należy porównywać obiektów z wartościami "Prawda" lub "Brak". Użyj 'jest' lub użyj wartości prawdy obiektu (tak powinno być' if args.flag: ... 'i' if args.outputname is None'). Ponadto wiesz, że możesz tworzyć niestandardowe akcje, prawda? Po prostu przeczytaj dokumentację argparse. – Bakuriu
@Bururiu "Możliwe jest podklasy argparse, aby słowo kluczowe action wywoływać funkcję." Nie chodzi o to, czy możliwe jest stworzenie niestandardowej akcji, ale czy można ją wywołać po analizie i manipulowaniu innymi argumentami. – Jzl5325
Jeśli chcesz go nazwać * po * analizie, to nie rozumiem, jaki jest stosunek "argparse" do twojego pytania. Ten moduł jest dostępny tylko po to, aby parsować wiersz poleceń i ostatecznie wykonywać akcje * podczas * analizy. Ponadto, nie rozumiem, co jest nie tak z podwójnym "jeśli". Na marginesie: nic nie zabrania korzystania z podklasy [parser] (http://docs.python.org/dev/library/argparse.html#argumentparser-objects) i ponownego zaimplementowania 'parse_args', dzięki czemu funkcja jest tam wywoływana, ale nadal będziesz musiał umieścić podwójne "jeśli" tam. – Bakuriu