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

标签 python command-line-arguments optparse

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

--update_entities="host_group hostname entity_type entities2monitor"

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

host = value.split()
(host_group, hostname, entity_type, entities2monitor) = (host[0], host[1], host[2], host[3:])

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

  • action_name:以空格分隔的字符串。 (例如:“测试操作”)

  • 主机组:字符串

  • actions_holder:包含以下内容的列表:

    • condition_type(字符串)
    • 条件运算符(字符串)
    • condition_filter(空格分隔的字符串)

  • operations_holder:由以下部分组成的列表:
    • 操作类型:(字符串)
    • 操作发送到:(字符串)

示例:

--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('" "')

哪种可行,但是有没有更无缝的方式来获取这些参数?

最佳答案

这里使用namedtuple怎么样:

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

使用 ;, 来区分您的命令组件:

command= "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"

现在实例化为:

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

它允许您调用:

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

其中最后两个元素可以通过 .split() 再次分割

关于python - 优雅地处理多个参数的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7209075/

相关文章:

c -++*argv、*argv++、*(argv++) 和 *(++argv) 之间的区别

命令行参数,打印列和行

python - 如何使用 setuptools 安装 scipy 和 numpy

python - 运行 pythoncom 代码时,Spyder 抛出 "assert sys.modules[modname] is not old_mod"

Python 3 websockets - 在关闭连接之前发送消息

c - 无效长选项的段错误

python - 使 optparse 将某些选项视为位置参数

python - Optparse 和很多 if not

Python:argparse 读取 csv 文件以发挥作用

python - matplotlib barh 在条之间产生奇怪的间距