Jestem zainteresowany użyciem argparsera ArgumentDefaultsHelpFormatter w klasie argparse (mój program ma kilka podrzędnych poleceń). Domyślnie argumenty wejściowe i wyjściowe są ustawione odpowiednio na sys.stdin i sys.stdout. Jednak formatowanie dla tych dwóch argumentów może być nieco dezorientujące dla użytkowników (np. (Domyślnie: ', tryb' r 'na 0x10028e0c0>). Czy istnieje sposób na konkretną i łatwą zmianę formatu wyjściowego dla tych dwóch argumentów, aby uzyskać coś jak 'domyślnie: STDIN' czy? 'domyślnie: STDOUT'Argparse i ArgumentDefaultsHelpFormatter. Formatowanie wartości domyślnych, gdy sys.stdin/stdout są wybrane domyślnie
Dziękuję
import sys
import argparse
parser = argparse.ArgumentParser(prog='PROG',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--infile',
'-i',
metavar='File',
help='The input file/stream.',
default=sys.stdin,
type=argparse.FileType('r'),
required=False)
parser.add_argument('--outfile',
'-o',
metavar='File',
help='The output file/stream.',
default=sys.stdout,
type=argparse.FileType('r'),
required=False)
parser.add_argument('--whatever-arg',
'-w',
type=str,
default='any',
help='Change something',
required=False)
args = parser.parse_args()
parser.print_help()
co daje:
usage: PROG [-h] [--infile File] [--outfile File]
[--whatever-arg WHATEVER_ARG]
optional arguments:
-h, --help show this help message and exit
--infile File, -i File
The input file/stream. (default: <open file '<stdin>',
mode 'r' at 0x10028e0c0>)
--outfile File, -o File
The output file/stream. (default: <open file
'<stdout>', mode 'w' at 0x10028e150>)
--whatever-arg WHATEVER_ARG, -w WHATEVER_ARG
Change something (default: any)
Czy nie byłoby prostsze korzystanie z domyślnego formatyzatora i jawnie lista wartości domyślnych w pomocy?Inną opcją jest pominięcie 'FileType' i otwarcie plików później. 'FileType' jest wygodny dla małych skryptów, nie tak dobry dla dużych (gdzie potrzebujesz większej kontroli nad tym, kiedy pliki są otwarte). – hpaulj
Mój program zawiera około 30 podprogramów, z których każdy ma własny zestaw argumentów. Dlatego bardzo wygodne jest użycie formatowania z wartościami domyślnymi. Mogę pominąć FileType, ale w takim przypadku nie będę korzystać z sprawdzania pliku argparse. – user451460
Następnie dostosowywanie metody '_get_help_string' działa. To wszystko, co i tak robi standardowa klasa formatyzatora. – hpaulj