hier ist, was ich tun möchte: Ein Befehl, der aussieht wie git Befehl Verhalten. Sie erhalten nicht die gleichen Optionen, egal ob Sie git commit oder git checkout eingegeben haben. Aber in meinem Fall mag ich auf einem Argument-Wert (ein Dateiname) wie dies anhand verschiedene Argumente bieten:Python argparse, bieten verschiedene Argumente basierend auf Parent-Argument-Wert
>cmd file.a -h
usage: cmd filename [-opt1] [-opt2]
positional arguments:
filename file to process
optional arguments:
-opt1 do something on files of type 'a'
-opt2 do something else on files of type 'a'
>cmd file.b -h
usage: cmd filename [-opt3] [-opt4]
positional arguments:
filename file to process
optional arguments:
-opt3 do something on files of type 'b'
-opt4 do something else on files of type 'b'
Ist es möglich, diese Art der Sache zu tun mit Python und argparse?
Was ich bisher versucht habe, ist:
parser = argparse.Argument_parser(prog='cmd')
subparsers = parser.add_subparsers()
parser.add_argument('filename',
help="file or sequence to process")
args = parser.parse_args(args=argv[1:])
sub_parser = subparsers.add_parser(args.filename, help="job type")
base, ext = os.path.splitext(args.filename)
if ext == 'a':
sub_parser.add_argument("-opt1", action='store_true')
sub_parser.add_argument("-opt2", action='store_true')
elif ext == 'b':
sub_parser.add_argument("-opt3", action='store_true')
sub_parser.add_argument("-opt4", action='store_true')
args = parser.parse_args(args=argv[1:])
Ich weiß nicht, ob ich subparsers oder Kind Parser oder Gruppen verwenden soll, bin ich irgendwie in all den Möglichkeiten, die argparse
Basierend auf dem Verhalten, das Sie sehen möchten, klingt es so, als wäre ein Subparser der Weg, den Sie gehen möchten. –