首页 文章

argparse参数模式

提问于
浏览
1

我需要在表单中有一个命令行

python script.py --step1=100 --step3=53 --step2=34

要求是

  • 我不知道提前有多少 --stepN 标志

  • --stepN 标志的顺序没有设置,所以我不能只使用 action='append'

我也对这些限制感兴趣:

  • 步骤编号应该是连续的,因此如果使用 --step20 但缺少 --step19 ,则这是一个错误 .

  • 我希望将值的目标放在一个列表中 . 所以在上面的命令行示例中,我想做类似的事情

args = parser.parse_args()
args.steps # is list [100, 34, 53]

可以 argparse 采取一种agruments模式,不知何故,我可以写一个自定义动作或类型来做我想要的?我在想类似的东西

parser.add_argument('--step*',
                    type=CustomType,
                    action=CustomAction,
                    help='Use --step1=a --step2=b, ....')

1 回答

  • 1

    这不是一个好的 argparse . 有很多关于接受广义 key=value 输入和各种kludgey答案的问题 . 在大多数情况下,答案相当于自己解析字符串,从 sys.argvextras parse_known_args .

    Create variable key/value pairs with argparse (python)

    对于您对密钥形式的额外要求,这是真实的 .

    在最新的这样的问题我建议使用 appendnargs=2 所以输入将是以下形式:

    python script.py --step 1 100 --step 2 53 --step 3 34
    

    生产环境

    Namespace(step=[[1,100], [2,53], [3, 24]])
    

    你可以处理和重视你心脏的内容 .

    Support arbitrary number of related named arguments with Python argparse

相关问题