ecco cosa vorrei fare: Un comando che assomiglia al comportamento del comando git. Non ottieni le stesse opzioni se hai digitato git commit o git checkout. Ma nel mio caso voglio fornire argomenti diversi sulla base di un valore di argomento (un nome di file) come questo:Python argparse, fornire argomenti diversi basati sul valore dell'argomento genitore
>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'
E 'possibile fare questo genere di cose utilizzando Python e argparse?
quello che ho provato finora è:
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:])
non so se devo usare subparsers o parser bambino o gruppi, Sono un po 'perso in tutte le possibilità offerte dal argparse
In base al comportamento che si desidera vedere, sembra che una subparser sia il modo in cui si desidera andare. –