Python动态命令行参数

时间:2017-03-10 07:04:03

标签: python command-line-arguments

我需要根据另一个参数指定命令行参数。 因此,第一个指定的参数应指定操作,并指定该操作的参数。

python test.py create -d what -s size -t type
python test.py delete -d what -a now
python test.py status -x something

是否有可以轻松完成的框架/库? 到目前为止,我已查看argparse,但无法找到可以执行此操作的任何内容?

1 个答案:

答案 0 :(得分:2)

问题在于argparse绝对是巨大的,我想这就是为什么你不能轻易找到它,但如果你已经阅读了整个文档(或者知道要查看的术语)因为你会发现subcommands的概念可能会达到你想要做的。这是一个非常简单的例子:

import argparse

parser = argparse.ArgumentParser(prog='PROG')
subparsers = parser.add_subparsers(dest='command', help='sub-command help')
parser_create = subparsers.add_parser('create')
parser_create.add_argument('-d')
parser_create.add_argument('-s')
parser_create.add_argument('-t')

parser_delete = subparsers.add_parser('delete')
parser_delete.add_argument('-d')
parser_delete.add_argument('-a')

parser_status = subparsers.add_parser('status')
parser_status.add_argument('-x')

一个简单的用法:

>>> p = parser.parse_args(['create', '-d', 'what', '-s', 'size', '-t', 'type'])
>>> p.command
'create'
>>> p.d
'what'

>>> p = parser.parse_args(['delete', '-d', 'what', '-a' 'now'])
>>> p.command
'delete'
>>> p.a
'now'

当然,请查看文档中的所有详细信息,例如使用dest为其提供更有意义的名称(您可以在示例中看到与add_subparsers调用一起使用)。