Python嵌套argparse问题

2024-06-16 09:42:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力让这个工作起来

在脚本.py命令onesubcommand mabyanotherone[something][--optional stuff]

这本书与脚本.py命令-h,它显示command得到了一组子命令,etc command subcommand-h显示它得到了一组必需的选项和可选的。在

parser = argparse.ArgumentParser(description='Some commands :D.')
mainsubparsers = parser.add_subparsers()

###

# Arg (sub)command <sub>
parser_list = mainsubparsers.add_parser('command', help='List different things, see command -h')
subparsers = parser_list.add_subparsers()

# Arg (sub)command > subcommand (amount)
parser_subcommand = subparsers.add_parser('subcommand')
parser_subcommand.add_argument('-a', '--amount', type=int, help='Amount to list', default=5)

###

args = parser.parse_args()

那我就试着让它发挥作用

^{pr2}$

但是抛出

py script.py command subcommand
Traceback (most recent call last):
  File "script.py", line 178, in <module>
    if args.parser_command:
AttributeError: 'Namespace' object has no attribute 'parser_command'

所以我试着把这个添加到解析器部分

def c_command:
  print(args)


parser_command = mainsubparsers.add_parser('command', help='List different things,see command -h')
subparsers = parser_command.add_subparsers()
parser_command.set_defaults(func=c_command)

###

args.func(args)

该函数被触发,但我不知道如何将子命令及其参数等取出args.命令引发命名空间。在

我该如何解决这个问题,或者如何正确地解决这个问题?在

我只需要带选项的嵌套命令。在


Tags: py命令脚本addparser选项arghelp
1条回答
网友
1楼 · 发布于 2024-06-16 09:42:26

问题不在于筑巢。它具有基本的subparsers定义。在

看看namespace,即parse_args创建的args对象:

In [4]: parser.parse_args(['command'])
Out[4]: Namespace()
In [5]: parser.parse_args(['command','subcommand'])
Out[5]: Namespace(amount=5)

像:mainsubparsers = parser.add_subparsers()这样的命令不会保存任何关于该命令是什么的指示。Out[5]由于parser_subcommand.add_argument...而有一个属性,值是默认值。在

In[4]在Py3中是可能的。在Py2中is将引发一个错误,因为需要子parser(这是Py3版本中的一个bug)。在

如果我将一个dest参数添加到每个add_subparsers(如文档中所讨论的),我将得到

^{pr2}$

这样就可以引用args.cmd和{}。在

文档还展示了如何使用set_defaults有选择地定义其他属性,包括具有对象值的属性。在

https://docs.python.org/3/library/argparse.html#sub-commands

相关问题 更多 >