python - 如何使用 python argparse 解析可选参数?

标签 python parsing argparse

我正在尝试解析这样的命令行

cmd {命令 [COMMAND_OPTS]}

cmd a {1,2}

cmd b

cmd c

命令{a,b,c}中,当命令为“a”时,“a”可能有COMMAND_OPTS(choices),比如{1,2},b或c不会有任何COMMAND_OPTS(choices)论据。 这是我尝试过的:

import argparse

if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-cmd', nargs = '+', choices = ['a', 'b', 'c'])
# sub_parser = parser.add_subparsers()
# parse_a = sub_parser.add_parser('a')
# parser_a.add_argument("a", default = "1", choices = ["1", "2"])
args = parser.parse_args()
if args.cmd:
    print args.cmd

如何使用 Python Argparse 解析它?看来子解析器不适用于这个问题..

谢谢

最佳答案

将所有命令放入子解析器中

parser = argparse.ArgumentParser()
sub_parser = parser.add_subparsers(dest='cmd')
parser_a = sub_parser.add_parser('a')
parser_a.add_argument("a", choices = ["1", "2"])
parser_b = sub_parser.add_parser('b')
parser_c = sub_parser.add_parser('c')
args = parser.parse_args()

args.cmd 最终应该是 a,b,c 之一。如果给定 a ,则应具有值为 '1''2'args.a 属性。该参数是必需的,因此指定默认值没有意义。

从交互式ipython shell:

In [13]: parser.parse_args(['b'])
Out[13]: Namespace(cmd='b')
In [14]: parser.parse_args(['c'])
Out[14]: Namespace(cmd='c')
In [15]: parser.parse_args(['a','1'])
Out[15]: Namespace(a='1', cmd='a')

关于python - 如何使用 python argparse 解析可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486227/

相关文章:

python - 使用Python解析未知数据类型对象Json

php - 如何使用 PHP Simple HTML DOM Parser 提取标题和元描述?

python - 根据从 csv 文件中提取的值创建复杂的嵌套字典。 - Python

C使用strtok解析输入文件

Python 2.6 - 解析参数

Python 和 GTK3 : How to create a Liststore

python - 检查脚本事件的代码 (python)

删除旧 SVN 文件的 Python 脚本缺少权限

python - 如何将Python点击的默认选项设置为-h?