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
答案 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()