这里是我想要做的: 一个看起来像git命令行为的命令。无论您是输入git commit还是git checkout,都无法获得相同的选项。 但在我的情况,我想提供基于一个参数值(文件名)这样的不同的参数:Python argparse,基于父参数值提供不同的参数
>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'
是否有可能做这种使用Python和argparse的事情吗?
我试过到目前为止是:
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:])
我不知道我是否应该使用subparsers或儿童解析器或群体,我有点失去了通过argparse
根据您想要看到的行为,听起来好像是一个子分析器是您想要去的方式。 –