验证Linux磁盘空间输出的Python脚本

2024-04-29 08:47:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的初学者,我正在编写一个python脚本来验证每个挂载点的利用率是否高于阈值。我可以调用shell命令并将输出保存到变量。但是我不能使用变量来分割字段,检查利用率是否高于阈值并报告错误

/dev/mapper/system-root     20G   18G  1.4G  93% /
udev                       3.9G  248K  3.9G   1% /dev
tmpfs                      3.9G   68K  3.9G   1% /dev/shm
/dev/sda1                  251M   71M  167M  30% /boot
/dev/mapper/system-oracle  128G   43G   79G  36% /opt/app/oracle
/dev/mapper/system-tmp     5.5G  677M  4.5G  13% /tmp
/dev/mapper/system-log     3.0G  140M  2.7G   5% /var/log
/dev/mapper/system-varsog   20G  654M   19G   4% /var/sog
/dev/mapper/system-backup   50G   24G   24G  50% /var/sog/backups

我想将字段5和字段6存储在一个关联数组中,并用threshold验证字段5,并报告它是否高于threshold值。

我使用下面的脚本来存储shell命令输出,现在我需要通过拆分它的字段来进行处理,但是由于它是多维的,所以我不能将它存储在数组中,所以我应该使用For循环来存储在不同的数组中。

在shell、awk和perl中很容易做到,但在python中似乎很难做到。

>>> import sys, os, time, threading, subprocess,datetime
>>> diskinfo_raw = subprocess.Popen("df -h", shell=True,stdout=subprocess.PIPE)
>>> output = diskinfo_raw.communicate()[0]
>>> print output

请帮我提个主意或参考。我已经使用loadtxt选项探索了选项,但是我不想在文件中存储值并再次读取它。


Tags: dev命令脚本logvar报告阈值数组
3条回答

你可以试试这个:

>>> import subprocess
>>> threshold = 10
>>> child = subprocess.Popen(['df', '-h'], stdout=subprocess.PIPE)
>>> output = child.communicate()[0].strip().split("\n")
>>> for x in output[1:]:
...     if int(x.split()[-2][:-1]) >= threshold:
...         print x

这将列出磁盘使用率为10%或大于10%的所有文件系统

你可以这样做

mount_usage = {line.split()[5]: line.split()[4] for line in output.split('\n')}

它将给出一个字典,key是挂载点,value是使用分数。

{'/': '93%', '/dev/shm': '1%', '/dev': '1%', '/boot': '30%', '/tmp': '13%', '/var/sog/backups': '50%', '/opt/app/oracle': '36%', '/var/log': '5%', '/var/sog': '4%'}

对数据源使用df -h

import re

d = {}
lines = output.split('\n')
next(lines)  # skip headers
for line in lines:
    usage, mount = re.split('\s+', line)[4:]
    d[usage] = mount

相关问题 更多 >