argparse:需要一个标志或两个以上位置参数

时间:2019-06-10 01:50:41

标签: python argparse

我正在编写一个程序,它可以采用一个标志参数--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 设置为可选,相反,我想同时要求两者 SRCDST none em>,然后要求--list

如果使用--list,我也会满足SRC / DST的或不的要求,而只是忽略它们。

有什么想法要用argparse来表达吗?谢谢!

1 个答案:

答案 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)