【问题标题】:Extract information from multi column output of subprocess.call()?从 subprocess.call() 的多列输出中提取信息?
【发布时间】:2018-01-10 14:37:18
【问题描述】:

如何从 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 地址。

我怎样才能实现这种情况?

【问题讨论】:

  • 请提供有关您正在为其提取 IP 地址的设备的更多信息。
  • 其实是Google Container引擎的Cluster的IP地址。
  • 输出的字段是用不同数量的空格字符还是用制表符分隔?了解响应的确切格式是您的问题中遗漏的一个重要细节。
  • 我认为列之间没有定义的空格或制表符。

标签: python shell subprocess


【解决方案1】:

在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

【讨论】:

  • 它返回 IP 地址为[b'35.202.20.241'] 我仍然需要此输出的 IP,我怎样才能只获得 IP?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 2018-06-23
  • 2017-07-19
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多