从subprocess.call()的多列输出中提取信息?

时间:2018-01-10 14:37:18

标签: python shell subprocess

如何从subprocess.call()方法执行的多列输出中提取信息?

我有这个命令运行:

test = subprocess.call('kubectl get ingress -o wide', shell=True)
print(test)

它将响应返回为:

NAME      HOSTS     ADDRESS         PORTS     AGE
gateway   *         35.202.20.241   80        52m

我想检索ADDRESS列值以获取IP地址。

我如何实现这种情况?

1 个答案:

答案 0 :(得分:2)

在Python中,subprocess.call函数只返回errorcode,如0,1等。要获得命令的实际输出,可以使用subprocess.check_output函数。

在Shell中,awk可以使用像print $3这样的列号来帮助提取列。要排除行标题,请使用if (NR>1)等条件。

这是一个如何实现它的例子。

import subprocess
address_col = subprocess.check_output("kubectl get ingress -o wide | awk '{ if(NR>1) print $3; }'", shell=True)
addresses = address_col.splitlines()
print addresses