将强制参数添加到可选参数

Adding mandatory arguments to optional arguments

我想做的很基础,但是浏览各种doc/tutorial却找不到如何做。也许我的整个方法是错误的。

例如,这很好用,允许用户执行操作 a 或操作 b

parser = argparse.ArgumentParser()
parser.add_argument("-do-a","--do_a",action="store_true",help="perform action a")
parser.add_argument("-do-b","--do_b",action="store_true",help="perform action b")
args = parser.parse_args()

现在假设操作 b 需要指定一个文件名。我该如何执行? 一个不正确的解决方案,可以更好地了解我想做什么:

parser = argparse.ArgumentParser()
parser.add_argument("-do-a","--do_a",action="store_true",help="perform action a")
parser.add_argument("-do-b","--do_b",action="store_true",help="perform action b on file","--file",required=True)
args = parser.parse_args()

也许你可以将 file 定义为选项 -do-b 的参数,如下所示:

parser = argparse.ArgumentParser()
parser.add_argument("-do-a", "--do_a", action="store_true",help="perform action a")
parser.add_argument("-do-b", "--do_b", action="store", type=str, nargs=1, default=False, help="perform action b on file")
args = parser.parse_args()

args.do_b 将是 False 或包含单个字符串项的列表。

或者,您可以使用 sub-parsers,但这在您的情况下更加复杂且不必要。如果 file 参数对于选项 do_b.

是可选的,那将是必要的