如何在括号中逐字使用变量
How to use variable in parenthesis verbatim
我有一个奇怪的问题,希望能在这里找到解决办法。我正在使用 push_to_gateway 模块来让 Prometheus 转义一些数据。该过程有 2 个步骤:
1) 像这样声明一个变量:
g = Gauge(ctr, '', ['host', 'ip'], registry=registry)
host 和 ip 是 Prometheus DB 中使用的标签。注册表与我的问题无关。
2) 填充数据:
g.labels(hostname, ipaddr).set(val)
hostname 和 ipaddr 是包含值的变量
当您在 Prometheus 中查看数据时,您会看到如下内容:
ctr{hostname="node1",ip="1.1.1.1"} -1
由于我有数千个计数器要导入 Prometheus,并且它们都有不同的标签集,所以我想创建一个包含标签及其值的 ordereddict,同时解析数据并使用它来生成 1) 和2).填充第 1) 部分很容易。我只是输入:
g = Gauge(ctr, '', list(labels.keys()), registry=registry)
该行需要一个列表,它得到了一个列表。
但是我如何填写第 2 部分),因为 g.labels 期望主机名和 ipaddr 由“,”分隔(即不是列表)。如果我执行 list(labels.values()),那么它会在括号内显示为一个列表,但这是行不通的。我需要 list(labels.values()) 扩展到括号内的 'node1','1.1.1.1' 才能正常工作,但我不知道该怎么做(如果可能的话) ) 这样 2) 看起来像:
g.labels('node1', '1.1.1.1').set(val)
感谢
这正是 *
派上用场的地方。它解压缩列表的值。
尝试:
list_of_labels = list(labels.values())
g.labels(*list_of_labels).set(val)
这是 *
在 python
中如何工作的示例
def f(a, b):
print a, b
tup = ("Hello", "there")
f(*tup)
# prints "Hello there"
另一个解决方案是即时解压:
hostname, ipaddr = labels.values()
g.labels(hostname, ipaddr).set(val)
我有一个奇怪的问题,希望能在这里找到解决办法。我正在使用 push_to_gateway 模块来让 Prometheus 转义一些数据。该过程有 2 个步骤:
1) 像这样声明一个变量:
g = Gauge(ctr, '', ['host', 'ip'], registry=registry)
host 和 ip 是 Prometheus DB 中使用的标签。注册表与我的问题无关。
2) 填充数据:
g.labels(hostname, ipaddr).set(val)
hostname 和 ipaddr 是包含值的变量
当您在 Prometheus 中查看数据时,您会看到如下内容:
ctr{hostname="node1",ip="1.1.1.1"} -1
由于我有数千个计数器要导入 Prometheus,并且它们都有不同的标签集,所以我想创建一个包含标签及其值的 ordereddict,同时解析数据并使用它来生成 1) 和2).填充第 1) 部分很容易。我只是输入:
g = Gauge(ctr, '', list(labels.keys()), registry=registry)
该行需要一个列表,它得到了一个列表。
但是我如何填写第 2 部分),因为 g.labels 期望主机名和 ipaddr 由“,”分隔(即不是列表)。如果我执行 list(labels.values()),那么它会在括号内显示为一个列表,但这是行不通的。我需要 list(labels.values()) 扩展到括号内的 'node1','1.1.1.1' 才能正常工作,但我不知道该怎么做(如果可能的话) ) 这样 2) 看起来像:
g.labels('node1', '1.1.1.1').set(val)
感谢
这正是 *
派上用场的地方。它解压缩列表的值。
尝试:
list_of_labels = list(labels.values())
g.labels(*list_of_labels).set(val)
这是 *
在 python
def f(a, b):
print a, b
tup = ("Hello", "there")
f(*tup)
# prints "Hello there"
另一个解决方案是即时解压:
hostname, ipaddr = labels.values()
g.labels(hostname, ipaddr).set(val)