将cmdline选项解析为argparse中的-option key = value类型

时间:2015-08-20 11:28:15

标签: python

我想将cmdline选项解析为argparse中的if (transform.eulerAngles==to.eulerAngles) { direction = ""; } 类型。 例如:

-option key=value

一般而言:

script.py -project prj1=rev1

在上文中,script.py -project prj1 --> OK script.py -project=prj1 --> OK script.py -project prj1=rev1 --> How to flag that argument value should be in str=str format. script.py -project=prj1,prj2 --> How to flag that we need comma separated strings. 是选项。 -project这样我希望论证存在。如果格式不正确,则应标记错误并打印帮助消息。一旦我使用proj1=rev1收集项目值,我就可以使用正则表达式。如果不是以上格式可以标记错误。但有没有办法过滤掉这个并在解析cmdline参数时标记错误?

1 个答案:

答案 0 :(得分:0)

您可以利用the argparse documentation中的这一事实:

  

type =可以接受任何带有单个字符串参数的callable并返回转换后的值:

例如,要支持第一种格式(--project prj1=rev1),您可以执行以下操作:

import os
import sys
import argparse


def handle_kv_string(val):
    if '=' in val:
        return val.split('=')
    else:
        raise argparse.ArgumentTypeError('Must specify k=v')

def parse_args():
    p = argparse.ArgumentParser()
    p.add_argument('--project',
                   type=handle_kv_string)
    return p.parse_args()


def main():
    args = parse_args()
    print args


if __name__ == '__main__':
    main()

这可以通过有效的参数获取:

$ ./argtest --project foo=bar
Namespace(project=['foo', 'bar'])

并且参数无效:

$ ./argtest --project foo
usage: argtest.py [-h] [--project PROJECT]
argtest.py: error: argument --project: Must specify k=v

您可以对第二个示例应用类似的解决方案。