我正在用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文档,但未对其进行配置。
我必须处理这个长文本解析并使其工作。
有没有人有想法解决这个问题?
答案 0 :(得分: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 '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
通常情况下,如果您有短(例如-t
)和长(例如--type
)个参数,则短参数应为每个一个字符。所以-desc
有点奇怪。
您不希望type=complex
。 complex
类型用于复数,例如1+0.5j
。
默认操作为store
,因此您可以省略它。
答案 1 :(得分:0)
通常您必须在长选项前加上两个连字符“ - ”。也许这就是问题?不知道是否只有“ - ”也有效。
答案 2 :(得分: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', ...])
(字符串列表)。