只是用於測試的默認值設置,如默認默認值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