只是用于测试的默认值设置,如默认默认值None
:
if args.b is None:
# -b was not used
这将不适用于-a
,因为store_true
意味着默认False
。你可以告诉使用None
作为默认而不是:
parser.add_argument('-a', action="store_true", default=None)
但因为你不能使用-a
并有not args.a
是真实的,你可以测试该默认还是:
parser.add_argument('-a', action="store_true")
args = parser.parse_args()
if not args.a:
# -a was not used
如果None
是一个有效的选择(比如,你使用action="store_const", const=None
)默认使用不同的哨点:
_sentinel = object()
parser.add_argument('-d', action="store_const",
const=None, default=_sentinel)
args = parser.parse_args()
if args.d is _sentinel():
# -d was not used
您还可以防止默认被设置共,由默认设置为argparse.SUPPRESS
:
parser.add_argument('-e', default=argparse.SUPPRESS)
args = parser.parse_args()
if not hasattr(args, 'e'):
# -e was not used
可以列出实际使用使用遍历parser._optionals._actions
,看是否他们.dest
属性是所有可选的动作本,而不是设置为.default
值:
used_options = [
action for action in parser._optionals._actions
if getattr(args, action.dest, action.default) is not action.default]
演示:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-a', action="store_true", default=False)
_StoreTrueAction(option_strings=['-a'], dest='a', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('-b', action="store", dest="b")
_StoreAction(option_strings=['-b'], dest='b', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('-c', action="store", dest="c", type=int)
_StoreAction(option_strings=['-c'], dest='c', nargs=None, const=None, default=None, type=<type 'int'>, choices=None, help=None, metavar=None)
>>> def list_used_options(parser, args):
... return [
... action for action in parser._optionals._actions
... if getattr(args, action.dest, action.default) is not action.default]
...
>>> args = parser.parse_args(['-a'])
>>> list_used_options(parser, args)
[_StoreTrueAction(option_strings=['-a'], dest='a', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)]
这只是回应什么sys.argv[1:]
已经告诉你通过了,当然。
它工作吗?如果不是,会发生什么? – 2015-02-10 15:25:29
我不明白你想达到什么目的,为什么argparse没有做你所需要的。你能否做出更详细的解释? – 2015-02-10 15:26:48
你有除了输出的例子吗? – 2015-02-10 16:08:47