我有一个带有以下参数的程序:
- 文件
- 目录
- 名称1
- 名称2
文件必须始终作为参数传递,目录可以或不传递,并且 name1 和 name2 必须不传递它们中的任何一个或同时传递它们。
这就是我此刻所拥有的:
parser = argparse.ArgumentParser()
parser.add_argument("file", help="The file")
parser.add_argument("resources_dir", default='.', nargs='?', help="The directory of media files")
parser.add_argument("name", nargs=2, help="names")
帮助显示:
用法: WACV [-H] 文件 [resources_dir] 名称名称
我希望它是:
用法: wacv 文件 [res_dir] [名称 1 名称 2]
但我希望"名称"参数就像我之前所说的那样。我怎样才能做到这一点?
我认为你应该使用
(`--names`, nargs=2)
这使得它们成为可选的,但如果提供,则需要 2。 此外,它将这 2 个字符串与"resources_dir"的可选字符串分开。
您可以使用nargs='*'
,允许 0、1 或更多。 但是 2 个字符串将分配给file
,dir
;3个用于归档、目录,1个用于姓名等。 换句话说,它无法通过内容判断可选字符串是属于dir
还是属于names
。 它严格按位置进行。
无论如何,没有0 or 2 nargs
,除非我上面建议。