python优雅地处理多个参数的序列

2024-09-30 14:17:19 发布

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

到目前为止,我通过Optparse将多个参数作为字符串处理, 例如:

--update_entities="host_group hostname entity_type entities2monitor"

其中entities2monitor有变量参数,通过在回调函数中获取它们(注意[3:]

^{pr2}$

但是,当我需要将以下表单的参数传入回调时,我应该如何处理它呢? (我可以控制将生成Optparse输入字符串的SQL)

  • 操作名称:空格分隔的字符串。(例如:'TEST ACTION'

  • 主机组:字符串

  • 行动持有人:一份清单,包括:

    • 条件类型(字符串)
    • 条件运算符(字符串)
    • 条件过滤器(空格分隔字符串)

以及

  • 运营持有人:由以下人员组成的名单:
    • 字符串类型:(U)
    • 操作发送到:(字符串)

示例:

--create_action='''TEST ACTION | client_service_platform | "CONDITION_TYPE_TRIGGER_NAME CONDITION_OPERATOR_LIKE Weighted Successful" "CONDITION_TYPE_HOST CONDITION_OPERATOR_EQUAL host01" | "OPERATION_TYPE_MESSAGE userid1" "OPERATION_TYPE_EMAIL userid1" "OPERATION_TYPE_EMAIL userid2"'''

这就是我目前所掌握的

actions_splits = actions_parameters.split(" | ")
action_name = actions_splits[0]
hostgroup = actions_splits[1]
actions_holder = actions_splits[2].strip('"').split('" "')
operations_holder = actions_splits[3].strip('"').split('" "')

哪种方法有效,但是有没有更无缝的方法来获取这些参数?在


Tags: 字符串testactions参数typeactioncondition条件
2条回答

在这里使用namedtuple怎么样:

import collections
Action = collections.namedtuple('Action', 'name hostgroup actions operations')

使用;,区分命令组件:

^{pr2}$

现在实例化为:

a = Action(*command.split(';'))

允许您拨打:

a.name
a.hostgroup
a.actions.split(',')
a.operations.split(',')

最后两个元素可以用.split()再次拆分

我不确定这是否是您想要的,但是在我看来,您可以使用argparse并使用nargs参数来指定应该使用多少个参数。在

你可能已经知道了,但是这里有个链接:http://docs.python.org/dev/library/argparse.html#nargs

使用nargs=+nargs=*将把你的参数放在一个列表中。以你的例子,我认为你可以将你的程序称为:

 create_action "TEST ACTION" client_service_platform \
  '"CONDITION_TYPE_TRIGGER_NAME CONDITION_OPERATOR_LIKE Weighted Successful"\
  "CONDITION_TYPE_HOST CONDITION_OPERATOR_EQUAL tt1scp1"'\
  '"OPERATION_TYPE_MESSAGE userid1" "OPERATION_TYPE_EMAIL userid1"\
  "OPERATION_TYPE_EMAIL userid2"'

相关问题 更多 >

    热门问题