【发布时间】:2011-10-04 23:35:11
【问题描述】:
使用argparse,是否可以在第一个未知参数处停止解析参数?
我找到了 2 个差不多的解决方案;
-
parse_known_args,但这允许在第一个未知参数之后检测已知参数。 -
nargs=argparse.REMAINDER,但这不会停止解析,直到第一个非选项参数。在此之前的任何无法识别的选项都会产生错误。
我是否忽略了什么?我应该使用argparse 吗?
【问题讨论】:
使用argparse,是否可以在第一个未知参数处停止解析参数?
我找到了 2 个差不多的解决方案;
parse_known_args,但这允许在第一个未知参数之后检测已知参数。 nargs=argparse.REMAINDER,但这不会停止解析,直到第一个非选项参数。在此之前的任何无法识别的选项都会产生错误。我是否忽略了什么?我应该使用argparse 吗?
【问题讨论】:
我自己没有使用过argparse(需要保持我的代码与 2.6 兼容),但是查看文档,我认为您没有遗漏任何内容。
所以我想知道为什么你想让argparse 停止解析参数,以及为什么-- 伪参数不起作用。 From the docs:
如果您的位置参数必须以
'-'开头并且看起来不像负数,则可以插入伪参数'--',它告诉parse_args()之后的所有内容都是位置参数:
>>> parser.parse_args(['--', '-f'])
Namespace(foo='-f', one=None)
【讨论】:
-- 不会完成这项工作,因为我不想强迫我的用户在某些情况下而不是在其他情况下在他们的命令中添加--:p跨度>
git checkout 中的路径之前使用--。此外,没有人强迫你总是把它放进去;当参数可能被误解为选项时,它就在那里。
-c 选项或 xterm 中的 -e 之类的东西,其中一个标志表示应使用所有剩余的参数,包括以“-”开头的参数?
一种方法是使用getopt 代替,尽管它可能并非在所有情况下都是完美的。
例如:
import sys
import os
from getopt import getopt
flags, args = getopt(sys.argv[1:], 'hk', ['help', 'key='])
for flag, v in flags:
if flag in ['-h', '--help']:
print(USAGE, file=sys.stderr)
os.exit()
elif flag in ['-k', '--key']:
key = v
一旦getopt 遇到非选项参数,它将停止处理参数。
【讨论】: