python psutil模块获取系统磁盘|CPU|内存Memory|时区TimeZone等信息

# -*- coding:utf-8 -*-

import subprocess
import psutil


class System(object):
    """
    获取系统信息
    """

    def __init__(self):
        self.sys = {}

    def get_time_zone(self):
        """
        获取系统时区
        """
        time_content = subprocess.Popen(
            "timedatectl status | grep Time",
            shell=True,
            stdout=subprocess.PIPE
        )
        content, _ = time_content.communicate()
        if content:
            time_zone = content.strip().split(": ")[-1]
            time_zone = time_zone.strip()
        else:
            time_zone = ""
        self.sys['time_zone'] = time_zone

    def _cpu(self):
        """
        获取系统cpu信息
        """
        self.sys["cpu"] = {}
        self.sys["cpu"]["cpu_percent"] = psutil.cpu_percent()
        cpus = subprocess.Popen(
            "top -bn 1 | grep -v 'grep' | grep '%Cpu(s):'",
            shell=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        if cpus.returncode is None:
            cpus = cpus.stdout.read().split()
        else:
            cpus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        self.sys["cpu"]["user"] = cpus[1]
        self.sys["cpu"]["system"] = cpus[3]
        self.sys["cpu"]["idle"] = cpus[7]
        self.sys["cpu"]["cpus"] = psutil.cpu_percent(percpu=True)

    def _disk(self):
        """
        获取磁盘信息
        """
        total_disk, used_total = 0, 0
        for i in psutil.disk_partitions():
            mountpoint = i.mountpoint
            if "home" in mountpoint and "docker" in mountpoint:
                continue
            used = psutil.disk_usage(i.mountpoint).used
            used_total += used
            mountpoint_list = mountpoint.split("/")
            if len(mountpoint_list) == 2:
                total_disk += psutil.disk_usage(i.mountpoint).total
        disk_remain = total_disk - used_total
        self.sys['disk'] = {}
        self.sys['disk']['total'] = total_disk
        self.sys['disk']['used'] = used_total
        self.sys['disk']['remain'] = disk_remain

    def _memory(self):
        """
        获取内存信息
        """
        self.sys["memory"] = {}
        self.sys["memory"]["total"] = psutil.virtual_memory().total
        self.sys["memory"]["percent"] = psutil.virtual_memory().percent
        self.sys["memory"]["used"] = psutil.virtual_memory().used
        self.sys["memory"]["free"] = psutil.virtual_memory().free
        self.sys["memory"]["cached"] = (
            psutil.virtual_memory().buffers + psutil.virtual_memory().cached
        )
        self.sys["memory"]["swap"] = psutil.swap_memory().used

    def _traffic(self):
        """
        获取所有网卡的流入和流出流量的总和
        """
        counters = psutil.net_io_counters(" ")
        self.sys["traffic"] = {"send": 0, "recv": 0}
        for counter in counters:
            if "veth" in counter or "lo" in counter or "docker" in counter:
                continue
            self.sys["traffic"]["send"] += counters[counter].bytes_sent
            self.sys["traffic"]["recv"] += counters[counter].bytes_recv


if __name__ == "__main__":
    system = System()
    system.get_time_zone()
    system._disk()
    system._memory()
    system._traffic()
    print(system.sys)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值