我正在编写一个程序,它可以采用一个标志参数--list
或两个或多个位置参数SOURCE [SOURCE ...] DESTINATION
。理想情况下,当使用SRC/DST
时,它也应该接受--recursive
,但这可以是一个全局选项,只是被--list
忽略。
现在我有这个:
group = parser.add_argument_group('Source / Dest Selection')
group.add_argument('--list', action="store_true")
group.add_argument('--recursive', action="store_true")
group.add_argument('SOURCE', nargs='+')
group.add_argument('DESTINATION')
但是,它始终需要SOURCE和DESTINATION。我不想将 each 设置为可选,相反,我想同时要求两者 SRC
和DST
或 none em>,然后要求--list
。
如果使用--list
,我也会满足SRC / DST的或不的要求,而只是忽略它们。
有什么想法要用argparse
来表达吗?谢谢!
答案 0 :(得分:0)
非常黑,但是您可以使用多个解析器。可能是这样的:
import argparse
parser1 = argparse.ArgumentParser()
parser1.add_argument('--list', action="store_true")
parser1.add_argument('DUMMY_POSITIONAL', nargs='*')
args1 = parser1.parse_args()
if not args1.list:
parser2 = argparse.ArgumentParser()
parser2.add_argument('SOURCE', nargs='+')
parser2.add_argument('DESTINATION')
args2 = parser2.parse_args()
if len(args2.SOURCE) == 0:
print("Must specify SOURCE")
else:
print(args2.SOURCE, args2.DESTINATION)