在解释我的问题之前,我想提一下,我在StackOverflow看过其他各种问题,但没有找到任何与我的问题相关的解决方案。所以,这就是为什么不标记为复制,请!
我正在处理一个Python(3.6)项目,在这个项目中,我需要运行一个终端命令,并从输出中解析一个以列形式出现的值。
下面是我运行的命令:
output = subprocess.call('kubectl get svc', shell=True)这是输出:
b'NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.35.240.1 <none> 443/TCP 28m
node-app1 LoadBalancer 10.35.245.164 35.239.29.239 8000:32249/TCP 26m现在,我需要从第二行和第四列获得EXTERNAL-IP。
我怎样才能得到这个价值?
发布于 2018-07-03 11:37:43
您可以从shell本身提取特定的列。这样,我们就可以避免文本处理所造成的开销。
out = subprocess.check_output(["kubectl get svc | awk '{print $3}'"], shell=True)
result = out.decode().split('\n')
print(result[1])输出:
10.0.0.1发布于 2018-07-03 11:19:20
这个外壳很不错。怎么样
output = subprocess.call('kubectl get svc | tr "\t" " " | tr -s " " | cut -d " " -f 4 | tail -1', shell=True)您还可以省略给出最后一行的tail -1,并在Python中进行拆分/过滤。
发布于 2018-07-03 11:31:43
你可以用熊猫来阅读数据。下面是一个完整的示例:
from StringIO import StringIO
import pandas
x=b"""NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.35.240.1 <none> 443/TCP 28m
node-app1 LoadBalancer 10.35.245.164 35.239.29.239 8000:32249/TCP 26m"""
dataframe = pandas.read_csv(StringIO(x), sep="\s+")
# print rows
for index, row in dataframe.iterrows():
print (row['NAME'], row['CLUSTER-IP'], row['PORT(S)'])
# search for a row with name node-app1 and print value in PORT(S) column:
print dataframe.loc[dataframe['NAME'] == 'node-app1']['PORT(S)'].to_string(index=False)https://stackoverflow.com/questions/51153201
复制相似问题