繁体   English   中英

Python:Argparse不会解析长文本参数

[英]Python: Argparse does not parse long text argument

我正在使用pyton编写新的CLI,并使用cmd和argparse库。 当我设置一个参数并使用长文本选项调用它时,它无法识别它是文本并引发异常。

这是我使用参数的方式:

WACP:~ cli$ add -t group -n NameForNewGroup -desc 'Description for new group' -c 2

响应是:

unrecognized arguments: - t   g r o u p   - n   N a m e F o r N e w G r o u p   - d e s c   ' D e s c r i p t i o n   f o r   n e w   g r o u p '   - c   2

在这里我如何添加参数:

self.parser.add_argument('-t', '--type',
                                 dest='type',
                                 help=Language.MSG_ADD_TYPE_HELP,
                                 action='store',
                                 default='device'
)
self.parser.add_argument('-c', '--config',
                                 dest='config',
                                 help=Language.MSG_ADD_GROUP_HELP,
                                 action='store',
                                 default=0
)
self.parser.add_argument('-n', '--name',
                                 dest='name',
                                 help=Language.MSG_ADD_NAME_HELP,
                                 action='store',
                                 default='New Device'
)
self.parser.add_argument('-desc', '--description',
                                 dest='description',
                                 help=Language.MSG_ADD_DESC_HELP,
                                 type=complex,
                                 action='store',
                                 default='Default description for device or group included in configuration values')

我查看了argparse文档,但未配置它的配置方式。

我必须处理这种长文本解析并使其起作用。

有没有人想解决这个问题?

为我工作。 也许您可以制作一个最小的测试用例? 什么版本的Python? 您确定使用的是argparse而不是optparse吗? 您是否在正确的对象上调用parse_args() -h的输出是什么?

import argparse
p = argparse.ArgumentParser()
p.add_argument('-t', '--type',
               dest='type')
p.add_argument('-c', '--config',
               dest='config')
p.add_argument('-n', '--name',
               dest='name')
p.add_argument('-desc', '--description',
               dest='description')
print(p.parse_args())

运行时:

$ python test.py -t group -n NameForNewGroup -desc 'Description for new group' -c 2
Namespace(config='2', description='Description for new group', name='NameForNewGroup', type='group')
$ python test.py -h
usage: test.py [-h] [-t TYPE] [-c CONFIG] [-n NAME] [-desc DESCRIPTION]

optional arguments:
  -h, --help            show this help message and exit
  -t TYPE, --type TYPE
  -c CONFIG, --config CONFIG
  -n NAME, --name NAME
  -desc DESCRIPTION, --description DESCRIPTION

注意

  1. 通常,如果您有短(例如-t )和长(例如--type )参数,则短参数应分别为一个字符。 所以-desc

  2. 您不需要type=complex complex类型用于复数,例如1+0.5j

  3. 默认操作是store ,因此您可以忽略它。

通常,您必须在longoptions前面加上两个连字符“-”。 也许这是问题所在? 不知道是否只有“-”也有效。

您如何调用parse_args 响应中的间距- tgroup - n N...表示您已完成p.parse_args(list('-t group -n N...'))或等效操作。 每个字符都是单独的参数字符串。

或者,也许您正在执行p.parse_args('-t group -n N ...') 为了进行测试,调用应该类似于p.parse_args(['-t','group','-n','N', ...]) (字符串列表)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM