【发布时间】:2017-04-21 20:29:40
【问题描述】:
Argparse 1.1 或 1.4 因 AssertionError 而失败 - 读取元变量值的奇怪正则表达式似乎炸毁了 argparse - 可能与 Python argparse AssertionError when number of arguments exceeds threshold 相关?
有没有其他方法可以创建或使用元变量[[USER@]HOST:]FILE?
测试设置:
$ virtualenv-3.5 --always-copy test2
$ ./test2/bin/pip install argparse
Python 代码 test.py:
#!/Users/[username]/Development/test2/bin/python3.5
import os
import sys
print('sys.prefix', sys.prefix)
sys.path.insert(
0, os.path.join(sys.prefix, 'lib/python3.5/site-packages'))
import argparse
print('argparse', argparse.__version__)
parser = argparse.ArgumentParser()
parser.add_argument(
'files',
metavar='[[USER@]HOST:]FILE',
nargs=argparse.PARSER,
)
parser.add_argument('-a', '-A', metavar='PTRN', dest='patterns', default=[])
parser.add_argument('-b', '-B', metavar='PTRN', dest='patterns', default=[])
parser.add_argument('-c', '-C', metavar='PTRN', dest='patterns', default=[])
parser.add_argument('-d', '-D', metavar='PTRN', dest='patterns', default=[])
parser.add_argument('-e', '-E', metavar='PTRN', dest='patterns', default=[])
parser.add_argument('-f', '-F', metavar='PTRN', dest='patterns', default=[])
print(parser.parse_args())
外壳输出:
$ ./test.py
sys.prefix /Users/[username]/Development/test2/bin/..
argparse 1.4.0
Traceback (most recent call last):
File "./test.py", line 24, in <module>
print(parser.parse_args())
File "/Users/[username]/Development/test2/bin/../lib/python3.5/site-packages/argparse.py", line 1725, in parse_args
args, argv = self.parse_known_args(args, namespace)
File "/Users/[username]/Development/test2/bin/../lib/python3.5/site-packages/argparse.py", line 1754, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
File "/Users/[username]/Development/test2/bin/../lib/python3.5/site-packages/argparse.py", line 1971, in _parse_known_args
self.error(_('too few arguments'))
File "/Users/[username]/Development/test2/bin/../lib/python3.5/site-packages/argparse.py", line 2391, in error
self.print_usage(_sys.stderr)
File "/Users/[username]/Development/test2/bin/../lib/python3.5/site-packages/argparse.py", line 2353, in print_usage
self._print_message(self.format_usage(), file)
File "/Users/[username]/Development/test2/bin/../lib/python3.5/site-packages/argparse.py", line 2309, in format_usage
return formatter.format_help()
File "/Users/[username]/Development/test2/bin/../lib/python3.5/site-packages/argparse.py", line 306, in format_help
help = self._root_section.format_help()
File "/Users/[username]/Development/test2/bin/../lib/python3.5/site-packages/argparse.py", line 236, in format_help
func(*args)
File "/Users/[username]/Development/test2/bin/../lib/python3.5/site-packages/argparse.py", line 358, in _format_usage
assert ' '.join(pos_parts) == pos_usage
AssertionError
【问题讨论】: