【发布时间】:2018-07-25 00:06:15
【问题描述】:
我正在努力让它工作
script.py command onesubcommand mabyanotherone [something] [--optional stuff]
此当前命令与 script.py 命令 -h 一起使用,它显示该命令有一组子命令,而 etc 命令子命令 -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()
然后我试图让它工作
if __name__ == '__main__':
if args.parser_command:
###
elif args.parser_command.subcommand:
# Do stuff
###
但抛出
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.command 抛出命名空间。
我该如何解决或如何以正确的方式做到这一点?
我只想要带有选项的嵌套命令。
【问题讨论】:
-
您的错误显示为
elif args.parser_command:,但您的示例代码中没有elif。请确保您发布的代码和错误同时出现。 -
已编辑以匹配错误。只是写下来时不匹配。 (无法复制粘贴)
-
您的选项被命名为
command和subcommand而不是parser_command和parser_subcommand(并且elif代码是无效的python)。 -
更改为 if args.command,这是输出“AttributeError: 'Namespace' object has no attribute 'command”。 elif 无效 python 怎么办?
-
缩进,以及该缩进处缺少其他相关代码。