這裏是我想要做的: 一個看起來像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
根據您想要看到的行爲,聽起來好像是一個子分析器是您想要去的方式。 –