【发布时间】:2017-05-07 21:33:31
【问题描述】:
所以我有以下代码:
parser = argparse.ArgumentParser(description='Manages anime_list.json', add_help=True, version='0.1')
parser.add_argument('-l', '--list', action='store_true', help='List all anime in file')
subparser = parser.add_subparsers(title='Actions', description='Actions that can be performed', dest='command')
add = subparser.add_parser('=add', help='Add anime entry')
add.add_argument('-n', '--name', type=str, required=False, default='',
help='The name of the anime adding. Will be auto filled in if left blank')
add.add_argument('-e', '--episode', type=int, required=False, default=0,
help='The last watched episode. Download starts add +1 this episode')
add.add_argument('-u', '--url', type=str, required=True, help='A link to any episode for the anime')
remove = subparser.add_parser('=remove', help='Remove anime entry')
remove.add_argument('-n', '--name', type=str, required=True, default='',
help='The name of the anime to remove')
args = parser.parse_args()
我想要的是子解析器是可选的。当用户使用--list 参数时,不必提供子解析器参数。当使用 argsparse 的 -h 或 -v 选项时,解析完成并显示帮助信息或版本号。但是当只使用我自己的-l 时,它会抛出一个异常,说没有提供足够的参数。
我发现一个建议说使用 subparser.required = False 应该使它们成为可选的,但它不起作用。
知道我该怎么做吗?我查了一下,似乎找不到解决办法。
【问题讨论】:
-
有点跑题了,但是如果你可以使用非标准库,你应该看看
docopt。绝对是编写命令行应用程序最优雅的方式。
标签: python