如何使用python从vmstat命令中删除CPU信息

时间:2015-08-11 08:50:40

标签: python

vmstat命令有以下输出,我试图删除cpu部分并在python中打印
的vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  30468  23468  36496 837876    0    0   143   179   57  105  2  1 97  1

使用以下python代码我会丢失空格,我如何正确格式化 所以输出看起来与上面的内容完全相同,删除了cpu部分

import subprocess
p = subprocess.Popen('vmstat', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
line1 = p.stdout.readlines()
line2 = ' '.join(line1[0].split()[:-1])
line3 = ' '.join(line1[1].split()[:-5])
line4 = ' '.join(line1[2].split()[:-5])
print line2
print line3
print line4

procs -----------memory---------- ---swap-- -----io---- -system--
r b swpd free buff cache si so bi bo in
0 0 30468 20608 36548 837880 0 0 143 179 57

1 个答案:

答案 0 :(得分:1)

让我们首先找到CPU标头的位置,然后剥去剩余的字符。我已将其设为通用,因此使用字段名称调用vmstat_without_field会将其从输出中删除。

import subprocess
import re

def vmstat_without_field(field = 'cpu'):
    lines = subprocess.Popen('vmstat', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.readlines()
    match_obj = re.search('\s-+%s-+' % field, lines[0])
    start = match_obj.start()
    end = match_obj.end()

    for line in lines:
        line = line[:start] + line[end:]
        line = line[:-1] if line[-1] == '\n' else line
        print(line)

vmstat_without_field()