Chciałbym wiedzieć, jak używać modułu argparse Pythona do odczytu argumentów zarówno z linii poleceń i ewentualnie z plików tekstowych. Wiem o argparse'owym fromfile_prefix_chars
, ale nie jest to dokładnie to, czego chcę. Chcę tego zachowania, ale nie chcę składni. Chcę interfejs, który wygląda tak:jak uzyskać argparse odczytać argumenty z pliku z opcją zamiast prefiksu
$ python myprogram.py --foo 1 -A somefile.txt --bar 2
Kiedy argparse widzi -a, powinien przestać czytać z sys.argv lub cokolwiek daję, i wywołać funkcję piszę, że będzie czytać somefile.text i powrotu lista argumentów. Po wyczerpaniu pliku należy wznowić przetwarzanie sys.argv lub cokolwiek innego. Ważne jest, aby przetwarzanie argumentów w pliku odbywało się w kolejności (tj .: -foo powinno być przetwarzane, następnie argumenty w pliku, a następnie -bar, aby argumenty w pliku mogły przesłonić --foo, i - pasek może przesłonić zawartość pliku).
Czy coś takiego jest możliwe? Czy mogę napisać niestandardową funkcję, która wypycha nowe argumenty na stos argparse'a, czy coś podobnego?
W twojej wersji, co wywołałoby specjalne traktowanie argumentu (zamiast znaku prefiksu)? – martineau
@martineau: opcja "-A" mówi "następnym argumentem jest plik do odczytania". Muszę być w stanie napisać własną funkcję, aby odczytać ten plik i zwrócić argumenty (nie jest to format jednoargumentowy w linii). –
Patrząc na [źródło _parse_known_args] (https: //hg.python. org/cpython/file/3.4/Lib/argparse.py # l1769), wygląda na to, że argparse lubi znać wszystkie argumenty z góry. Jeśli masz ustawioną opcję @fromfile_prefix_chars, to sprawdza argumenty i buduje zupełnie nową listę do przeanalizowania (_read_args_from_files). Myślę, że najlepszą opcją jest sparsowanie sys.argv z wyprzedzeniem, aby uzyskać listę argumentów. – mgilson