我想将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参数时标记错误?
答案 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
您可以对第二个示例应用类似的解决方案。