【发布时间】:2017-08-10 01:31:54
【问题描述】:
我有一个带有以下参数的程序:
- 文件
- 目录
- 姓名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] [name1 name2]
但我希望“名称”参数就像我之前所说的那样。我怎样才能做到这一点?
【问题讨论】:
-
假设
names只是字符串,你希望解析器如何确定name1是否不是可选的res_dir(假设没有提供res_dir)?没有办法直接用argparse强制0 or 2语义,但您可以接受*,然后进行自己的错误检查。 -
最后我决定在名字上接受 * 并检查自己是 0 还是 2,但我想知道是否有更好的方法来做到这一点