我的灵感主要来自 git为了这。这是我的闹钟应用程序的一部分:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument(
'--time',
metavar="HH:MM:SS",
help='time in 24 hour format separated by colon'
)
group.add_argument(
'--show',
action='store_true',
help='show the list of set alarms'
)
alarm = parser.parse_args()
if alarm.time:
writeTimeToTheDatabase()
if alarm.show:
extractTimeFromDatabase()
只要我从两个参数中删除 --
就可以很好地工作。我得到一个 ValueError
类似于:
Traceback (most recent call last):
File "./alarm.py", line 65, in <module>
help='time in 24 hour format separated by colon'
File "/usr/lib/python2.7/argparse.py", line 1295, in add_argument
return self._add_action(action)
File "/usr/lib/python2.7/argparse.py", line 1515, in _add_action
raise ValueError(msg)
ValueError: mutually exclusive arguments must be optional
它讨论了相互排斥的论点,但我认为回溯与实际问题关系不大。
如果你想让你的程序以这种形式接受参数
./yourprog time
或
./yourprog show
那么你要么使用subparsers ,或者你应该只让你的程序接受一个确定它做什么的“命令”参数。如果你想让 time
和 show
命令有自己的参数,你需要子解析器;否则,“命令”参数会更容易。简单地删除连字符会使您的参数成为必需的位置参数,而不是命名的可选参数。那不是你想要的,也不符合“互斥”。
我是一名优秀的程序员,十分优秀!