在Python中调用SH命令进行系统监控
在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模块的好处是它是一个跨平台的库,可以在不同的操作系统上使用相同的接口获取系统监控信息。它还提供了其他丰富的功能,如获取进程信息、监控系统负载等。
