开发者社区> 问答> 正文

如何解析选项列表中的多个位置参数?

我需要为启动工作程序编写django管理命令(与django不相关)。我从中得到启发,docker-compose up并希望以下行为:

services = ['a', 'b', 'c']

import argparse

ap = argparse.ArgumentParser()

ap.add_argument('services', ???)

ap.parse_args(''.split())

Namespace(services=[])

ap.parse_args('a b'.split())

Namespace(services=['a', 'b'])

ap.parse_args('a b d'.split()) : error: argument services: invalid choice: 'd' (choose from 'a', 'b', 'c')

ap.parse_args('a b b'.split())

: error: argument services: duplicated choice: 'b'

目前,我已经测试了几种方法,但是主要的障碍是,如果choices=services提供,nargs='*'则不再允许使用0参数。

ap.add_argument('services', choices=services, nargs='*')

ap.parse_args(''.split())

usage: [-h] [{a,b,c} [{a,b,c} ...]]

: error: argument services: invalid choice: [] (choose from 'a', 'b', 'c') 尽管有一种可行的解决方案(具有自定义类型)和一种解决方案(稍后再验证),但他们感觉不对。

展开
收起
游客6qcs5bpxssri2 2019-09-26 19:49:25 1306 0
1 条回答
写回答
取消 提交回答
  • 另一种解决方案是将[]文字空列表添加到中choices。

    ap.add_argument('services', choices=services + [[]], nargs='*')

    ap.parse_args(''.split())

    Namespace(services=[])

    这是由于nargs产生一个空列表并choices根据结果​​进行验证。该choiceskwarg变['a', 'b', 'c', []],这看起来奇怪,但这是需要两个选项一起工作。

    2019-09-27 09:53:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像