1

我正在用 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 文档并没有配置它是如何实现的。

我必须处理这个长文本解析并使其工作。

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

4

3 回答 3

1

为我工作。也许你可以制作一个最小的测试用例?什么版本的 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 '新组的描述' -c 2
Namespace(config='2', description='新组的描述', name='NameForNewGroup', type='group')
$ python test.py -h
用法:test.py [-h] [-t TYPE] [-c CONFIG] [-n NAME] [-desc DESCRIPTION]

可选参数:
  -h, --help 显示此帮助信息并退出
  -t 类型,--type 类型
  -c 配置,--config 配置
  -n 名称,--name 名称
  -desc 描述,--description 描述

笔记

  1. 通常,如果您有短(例如-t)和长(例如--type)参数,短参数应该是一个字符。所以-desc有点奇怪。

  2. 你不想type=complex。该complex类型用于复数,例如1+0.5j.

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

于 2013-02-20T15:08:14.257 回答
0

你怎么叫parse_args?响应中的间距- t g r o u p - n N...表明您已经完成了p.parse_args(list('-t group -n N...')),或其等价物。每个字符都是一个单独的参数字符串。

或者,也许你正在做p.parse_args('-t group -n N ...'). 对于测试调用应该类似于p.parse_args(['-t','group','-n','N', ...])(字符串列表)。

于 2013-08-08T20:32:13.747 回答
0

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

于 2013-02-20T15:02:28.747 回答