【发布时间】:2015-12-01 01:49:31
【问题描述】:
我对 Python 2.7 中的 argparse 有疑问。我试图忽略未使用的参数,因为我有一个批处理文件,该文件将参数传递给多个 Python 脚本,并且不同的脚本需要提取不同的参数。
例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a', action='store_true')
如果我自己指定每个参数,它工作正常:
args, unknown = parser.parse_known_args(['-a',' -b'])
print args
# Namespace(a=True)
print unknown
# [' -b']
但如果我以串联格式指定它们:
args, unknown = parser.parse_known_args(['-ab'])
我明白了:
: error: argument -a: ignored explicit argument 'b'
但是,如果我将这一行添加到上面的代码中:
parser.add_argument('-b', action='store_true')
然后这个工作:
args, unknown = parser.parse_known_args(['-ab'])
print args
# Namespace(a=True, b=True)
print unknown
# []
所以看来我只能将连接格式与已知参数一起使用。我想知道是否有一种方法可以使用连接格式,它可以只提取它知道的参数?我能想到的唯一选择就是在所有 Python 脚本中定义所有参数,但那样似乎会污染 -h 帮助显示?
【问题讨论】:
-
这就是它的工作原理。如果你看方法:它被称为
parse_KNOWN_args()。 -
但是参数 -ab 真的只是两个独立参数 a 和 b 的缩短版本,其中 a 已知而 b 不知道吗?如果我使用 -a -b 那么即使 -b 未知,它也可以工作。我只想选择使用 -ab 选项,因为许多管理员更熟悉这种输入方式。
-
然后定义参数。
标签: python python-2.7 argparse