如何在python的ArgumentParser()中解析特殊字符?



我正在处理一个应用程序,该应用程序接收参数,如":"分隔字符串作为节点ID和可能包含几个特殊字符的流名称。当我想解析参数时,由于诸如*之类的特殊字符的一些问题而触发错误。这是一个示例输入:

python flowapp.py --remove 00:00:02:84:75:e2:95:42 UDP*node-3_to_node-4*dp9000__@node-1

下面是我用来解析选项"——remove"的代码:

parser.add_argument("-r","--remove",help="remove the specified flow
entry from a given node",nargs='2')

当我执行应用程序时,我得到以下错误:

...
start_index = consume_optional(start_index)
File "/usr/lib/python2.7/argparse.py", line 1858, in consume_optional
arg_count = match_argument(action, selected_patterns)
File "/usr/lib/python2.7/argparse.py", line 2011, in _match_argument
nargs_pattern = self._get_nargs_pattern(action)
File "/usr/lib/python2.7/argparse.py", line 2176, in _get_nargs_pattern
nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
TypeError: can't multiply sequence by non-int of type 'str'              

是否有一种方法可以告诉python的argparser将-,*或@等字符解释为特殊字符而不是"math"操作符?

问题不在于特殊字符。sys.argv将类似于:

['flowapp.py', '--remove', '00:00:02:84:75:e2:95:42', 'UDP*node-3_to_node-4*dp9000__@node-1']

argparse应该没有问题处理。

问题是nargs的字符串参数:

parser.add_argument("-r","--remove",...,nargs='2')

作为解析的一部分,它构建一个参数匹配模式,该模式取决于nargs值:

nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
TypeError: can't multiply sequence by non-int of type 'str' 

如果nargs*等特殊值,则必须为整数。你给了它一个字符串

 parser.add_argument("-r","--remove",...,nargs=2)

在其他版本的argparse中,您可能会得到不同的错误:

 ValueError: length of metavar tuple does not match nargs

但这是同一个问题。

相关内容

  • 没有找到相关文章

最新更新