Ich bin daran interessiert, die ArgumentDefaultsHelpFormatter Klassenformatierung von argparse zu verwenden (mein Programm hat mehrere Unterbefehle). Standardmäßig sind die Eingabe- und Ausgabeargumente auf sys.stdin bzw. sys.stdout festgelegt. Allerdings kann die Formatierung für diese beiden Argumente für die Benutzer ein wenig verwirrend sein (zB: ', mode' r 'bei 0x10028e0c0>) Gibt es eine Möglichkeit, das Ausgabeformat für diese beiden Argumente gezielt und einfach zu ändern so etwas wie 'default: STDIN' oder? 'default: STDOUT'Argparse und ArgumentDefaultsHelpFormatter. Formatieren von Standardwerten, wenn sys.stdin/stdout als Standard ausgewählt ist
Danke
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()
welche gibt:
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)
Wäre es nicht einfacher, den Standardformatierer zu verwenden und die Standardwerte explizit in der Hilfe aufzulisten?Eine andere Möglichkeit ist, 'FileType' zu überspringen und die Dateien später selbst zu öffnen. 'FileType' ist praktisch für kleine Skripte, nicht so gut für große (wo Sie mehr Kontrolle darüber brauchen, wann die Dateien geöffnet sind). – hpaulj
Mein Programm enthält etwa 30 Unterprogramme, die alle ihren eigenen Satz von Argumenten haben. Daher ist es sehr praktisch, die Formatierung mit Standardwerten zu verwenden. Ich kann den FileType überspringen, aber in diesem Fall werde ich nicht von der argparse Dateiprüfung profitieren. – user451460
Dann funktioniert die '_get_help_string' Methode. Das ist alles, was diese Standard-Formatierungsklasse sowieso tut. – hpaulj