欢迎访问宙启技术站
智能推送

在Python中调用SH命令进行系统监控

发布时间:2024-01-19 20:57:49

在Python中,可以使用subprocess模块调用shell命令进行系统监控。subprocess模块提供了一个强大的接口,可以方便地与子进程进行通信并捕获输出。

下面是一个使用subprocess模块调用shell命令进行系统监控的例子:

import subprocess

def monitor_system():
    # 调用shell命令,获取CPU信息
    cpu_info = subprocess.check_output("top -n 1 -b | grep 'Cpu(s)'", shell=True)
    print("CPU信息:")
    print(cpu_info.decode('utf-8'))

    # 调用shell命令,获取内存信息
    mem_info = subprocess.check_output("free -m", shell=True)
    print("内存信息:")
    print(mem_info.decode('utf-8'))

    # 调用shell命令,获取磁盘信息
    disk_info = subprocess.check_output("df -h", shell=True)
    print("磁盘信息:")
    print(disk_info.decode('utf-8'))

    # 调用shell命令,获取网络连接信息
    net_info = subprocess.check_output("netstat -nap", shell=True)
    print("网络连接信息:")
    print(net_info.decode('utf-8'))

if __name__ == "__main__":
    monitor_system()

在上述例子中,定义了一个monitor_system函数,它使用subprocess.check_output函数调用shell命令获取系统监控信息。首先,调用top -n 1 -b | grep 'Cpu(s)'获取CPU信息,然后调用free -m获取内存信息,df -h获取磁盘信息,netstat -nap获取网络连接信息。最后,通过print函数打印出获取到的信息。

注意,subprocess.check_output函数会阻塞当前进程,直到调用的命令执行完成并返回结果。在调用subprocess.check_output函数时,将shell参数设置为True表示在shell中运行命令。

运行上述代码后,将会输出系统的CPU信息、内存信息、磁盘信息和网络连接信息。

除了使用subprocess.check_output函数,还可以使用subprocess.Popen函数创建一个子进程并与其通信。subprocess.Popen函数可以更加灵活地控制子进程的执行。

另外,也可以使用psutil模块来获取系统监控信息。psutil是一个跨平台的系统进程和系统利用率信息库,可以方便地获取各种系统监控信息。下面是一个使用psutil模块获取系统监控信息的例子:

import psutil

def monitor_system():
    # 获取CPU信息
    cpu_percent = psutil.cpu_percent(interval=1)
    print("CPU使用率:%s%%" % cpu_percent)

    # 获取内存信息
    mem_info = psutil.virtual_memory()
    print("总内存:%sM" % (mem_info.total / 1024 / 1024))
    print("已使用内存:%sM" % (mem_info.used / 1024 / 1024))
    print("内存使用率:%s%%" % mem_info.percent)

    # 获取磁盘信息
    disk_info = psutil.disk_usage('/')
    print("总磁盘空间:%sG" % (disk_info.total / 1024 / 1024 / 1024))
    print("已使用磁盘空间:%sG" % (disk_info.used / 1024 / 1024 / 1024))
    print("磁盘使用率:%s%%" % disk_info.percent)

    # 获取网络连接信息
    net_info = psutil.net_connections()
    print("网络连接数:%s" % len(net_info))

if __name__ == "__main__":
    monitor_system()

在上述例子中,使用psutil模块提供的函数获取了系统的CPU使用率、内存信息、磁盘信息和网络连接信息。psutil.cpu_percent函数用于获取CPU使用率,psutil.virtual_memory函数用于获取内存信息,psutil.disk_usage函数用于获取磁盘信息,psutil.net_connections函数用于获取网络连接信息。通过打印获取到的信息,可以进行系统监控。

使用psutil模块的好处是它是一个跨平台的库,可以在不同的操作系统上使用相同的接口获取系统监控信息。它还提供了其他丰富的功能,如获取进程信息、监控系统负载等。