Sono interessato all'utilizzo del formattatore della classe ArgumentDefaultsHelpFormatter di argparse (il mio programma ha diversi sottocomandi). Per impostazione predefinita, gli argomenti di input e output sono impostati rispettivamente su sys.stdin e sys.stdout. Tuttavia, la formattazione di questi due argomenti potrebbe essere un po 'di confusione per gli utenti (es. (Default:', mode 'r' a 0x10028e0c0>). C'è un modo per modificare in modo specifico e semplice il formato di output per questi due argomenti qualcosa come 'default: STDIN' o? 'default: STDOUT'Argparse e ArgumentDefaultsHelpFormatter. Formattazione dei valori predefiniti quando sys.stdin/stdout sono selezionati come predefiniti
Grazie
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()
che dà:
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)
Non sarebbe più semplice utilizzare il formattatore predefinito ed elencare esplicitamente i valori predefiniti nella guida?Un'altra opzione è quella di saltare 'FileType', e aprire i file te stesso in seguito. 'FileType' è conveniente per piccoli script, non così buono per quelli grandi (in cui è necessario un maggiore controllo su quando i file sono aperti). – hpaulj
Il mio programma contiene circa 30 sottoprogrammi tutti con un proprio set di argomenti. Pertanto è molto conveniente utilizzare la formattazione con valori predefiniti. Posso saltare il FileType ma in tal caso non trarrò vantaggio dal controllo del file argparse. – user451460
Quindi la personalizzazione del metodo '_get_help_string' funziona. Questo è tutto ciò che questa classe di formattazione predefinita fa comunque. – hpaulj