在argpar中将cmdline选项解析为option key=value类型

2024-05-16 10:56:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在argparse中将cmdline选项解析为-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以这种方式,我希望参数存在。如果错误的格式不正确,它应该标记错误并打印帮助消息。我可以在使用(\w)=(\w)收集项目值之后使用正则表达式。如果不是上述格式,则可以标记错误。但是有没有一种方法可以过滤掉这一点,并在分析cmdline参数本身时标记错误?你知道吗


Tags: topy标记projectthatvalue选项错误
1条回答
网友
1楼 · 发布于 2024-05-16 10:56:10

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

type= can take any callable that takes a single string argument and returns the converted value:

例如,要支持第一种格式( 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

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

相关问题 更多 >