【问题标题】:Argparse with multiple subparsers in one command在一个命令中使用多个子解析器的 Argparse
【发布时间】:2019-09-23 01:06:20
【问题描述】:

我希望能够实现这样的目标:

'python程序宿主添加192.168.1.1'

'python程序宿主删除192.168.1.1'

我不知道如何正确编码“添加”或“删除”子解析器。

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()

host_cmd = subparsers.add_parser('host')
host_cmd.set_defaults(func=host)
add_cmd.add_argument('add', dest='add')

我希望能够读取用户传入的变量(在本例中为 192.168.1.1)。

【问题讨论】:

  • 使用argparse,当您收到错误消息时,请返回 Stackoverflow

标签: python arguments argparse


【解决方案1】:

使用当前代码,您只能创建 host --add 192.168.1.1,但它的代码要简单得多。

import argparse

parser = argparse.ArgumentParser()

subparsers = parser.add_subparsers(dest='parser')

host_cmd = subparsers.add_parser('host')

host_cmd.add_argument('--add')
host_cmd.add_argument('--remove')

args = parser.parse_args()
print(args)

if args.parser == 'host':
    if args.add is not None:
        print('add host:', args.add)
    if args.remove is not None:
        print('remove host:', args.remove)

你需要 subparser 中的 subparser - host add 192.168.1.1

import argparse

parser = argparse.ArgumentParser()

subparsers = parser.add_subparsers(dest='parser')

host_cmd = subparsers.add_parser('host')

host_subparsers = host_cmd.add_subparsers(dest='parser_host')

host_add_cmd = host_subparsers.add_parser('add')
host_add_cmd.add_argument('ip')

host_remove_cmd = host_subparsers.add_parser('remove')
host_remove_cmd.add_argument('ip')

args = parser.parse_args()
print(args)

if args.parser == 'host':
    if args.parser_host == 'add':
        print('add host:', args.ip)
    elif args.parser_host == 'remove':
        print('remove host:', args.ip)

编辑:host add port 80 的示例,但与 host add 192.168.1.1 存在冲突,因此我将其删除

import argparse

parser = argparse.ArgumentParser()

subparsers = parser.add_subparsers(dest='parser')

host_cmd = subparsers.add_parser('host')

host_subparsers = host_cmd.add_subparsers(dest='parser_host')

host_add_cmd = host_subparsers.add_parser('add')
#host_add_cmd.add_argument('ip')

add_subparsers = host_add_cmd.add_subparsers(dest='parser_add')

host_add_port_cmd = add_subparsers.add_parser('port')
host_add_port_cmd.add_argument('add_port')


host_remove_cmd = host_subparsers.add_parser('remove')
host_remove_cmd.add_argument('ip')

args = parser.parse_args()
print(args)

if args.parser == 'host':
    if args.parser_host == 'add':
        if args.parser_add == 'port':
            print('add port', args.add_port)
    elif args.parser_host == 'remove':
        print('remove', args.ip)

【讨论】:

  • 嘿弗拉斯,说如果我想从“添加”分支。例如:'python 程序主机添加端口 88' - 我试图添加 add 的子解析器,但我没有正确... add_subparsers = host_add_cmd.add_subparsers(dest='parser_add') host_add_port_cmd = add_subparsers.add_parser( 'add') host_add_port_cmd.add_argument('port')
  • 我为host add port 80 添加了示例,但与host add 192.168.1.1 存在冲突,两者不能一起工作。这太复杂了。我会使用--port
猜你喜欢
  • 2017-01-31
  • 2012-05-13
  • 2016-08-18
  • 2018-10-23
  • 2020-09-06
  • 2014-10-08
  • 2020-10-24
  • 2013-02-27
相关资源
最近更新 更多