Python Psutil模块用法

psutil是一个跨平台库(https://psutil.readthedocs.io/en/latest/) 能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要用来做系统监控,性能分析,进程管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris 等操作系统.

1、安装

1
2
3
4
5
Linux安装:
[root@instance-9 ~]# yum -y install gcc python3-dev
[root@instance-9 ~]# pip3 install psutil
Windows安装: D:\> pip install psutil

2、查看当前用户相关信息

1
2
3
4
5
import psutil
psutil.users()
[suser(name='zane4649', terminal='pts/6', host='192.168.31.101', started=1590479232.0, pid=15216)]
>>>

3、当前系统启动时间

1
2
3
>>> psutil.boot_time()
1581935267.0
>>>

4、查看内存大小

1
2
3
4
5
6
7
8
9
10
11
12
>>> psutil.virtual_memory().total
615329792
>>>
>>> mem_info = psutil.virtual_memory()
>>> mem_info.total
615329792
>>> mem_info.used
178503680
>>> mem_info.free
278347776
>>>

5、查看swap空间

1
2
3
>>> psutil.swap_memory()
sswap(total=0, used=0, free=0, percent=0.0, sin=0, sout=0)
>>>

6、获取cpu核心数

1
2
3
>>> psutil.cpu_count()
1
>>>

7、获取cpu物理核心数

1
2
3
>>> psutil.cpu_count(logical=False)
1
>>>

8、查看cpu使用率

1
2
3
>>> psutil.cpu_percent(interval=1, percpu=True)
0.4
>>>

9、查看cpu空闲情况

1
2
3
>>> psutil.cpu_times()
scputimes(user=110763.46, nice=294.71, system=171144.99, idle=7235852.97, iowait=1103.63, irq=0.0, softirq=173.03, steal=0.0, guest=0.0, guest_nice=0.0)
>>>

10、查看cpu平均使用率

1
2
3
for i in range(10):
stats = psutil.cpu_percent(interval = 1, percpu = True)
print(stats)

11、查看磁盘分区

1
2
3
>>> len(psutil.disk_partitions())
1
>>>

12、查看磁盘使用率

1
2
3
>>> psutil.disk_usage('/')
sdiskusage(total=10725883904, used=3042398208, free=7683485696, percent=28.4)
>>>

13、查看IO使用率

1
2
3
4
5
6
7
8
9
>>> psutil.disk_io_counters()
sdiskio(read_count=1267423, write_count=2259240, read_bytes=43593847296, write_bytes=32287985664, read_time=12220244, write_time=22429833, read_merged_count=6235, write_merged_count=439942, busy_time=5365109
>>>
```
## **14、获取网络读写字节个数 **
```Python
>>> psutil.net_io_counters()
snetio(bytes_sent=75090284050, bytes_recv=60619202739, packets_sent=53111418, packets_recv=65103399, errin=0, errout=0, dropin=0, dropout=0)

15、查看网络接口状态

1
2
>>> psutil.net_if_stats()
{'eth0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=65535, mtu=1460), 'lo': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=65536)}

16、查看网络接口信息

1
2
>>> psutil.net_if_addrs()
{'lo': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_PACKET: 17>, address='00:00:00:00:00:00', netmask=None, broadcast=None, ptp=None)], 'eth0': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='10.170.0.3', netmask='255.255.255.255',

17、查看网络连接信息

1
2
>>> psutil.net_connections()
[sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='0.0.0.0', port=5050), raddr=(), status='NONE', pid=7288), sconn(fd=-1, family=<AddressFamily.AF_INET6: 23>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='::', port=5353), raddr=(), status='NONE', pid=12872), sconn(fd=-1, family=<AddressFamily.AF_INET6: 23>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='::', port=3702), raddr=(), status='NONE', pid=2308), sconn(fd=-1, family=<AddressFamily.AF_INET: 2>

18、查看pid相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
psutil.pids() #获取所有进程PID
psutil.test() #列出所有进程信息,类似top命令
psutil.pid_exists(29306) #判断进程是否存在
p = psutil.Process(1160) #查看1160进程的信息
print(p.name()) #查看进程的名称
print(p.exe()) #查看exe进程的路径
print(p.cwd()) #进程工作目录
print(p.cmdline()) #进程启动的命令行
print(p.ppid()) #父进程ID
print(p.parent()) #查看父进程
print(p.children()) #查看子进程列表
print(p.status())#查看进程的状态
print(p.username()) #查看进程运行的用户
print(p.create_time()) #查看进程运行的时间
print(p.cpu_times()) #查看进程使用cpu信息
print(p.memory_info()) #进程使用内存信息
print(p.open_files()) #进程打开的文件
print(p.connections()) #进程的网络连接
print(p.num_threads()) #进程的线程数量
print(p.threads()) #进程的所有线程信息
print(p.environ()) #进程的环境变量
print(p.kill()) #kill当前进程

19、列出所有进程

1
2
for pids in psutil.process_iter(['pid', 'name']):
print(pids.info)

20、其他

1
2
3
4
5
6
7
8
from subprocess import PIPE
p = psutil.Popen(['D:/Software/python3.7/python.exe', '-c', "print('hello Python.')" ], stdout = PIPE)
print(p.name())
print(p.status())
print(p.username())
print(p.cpu_times)
print(p.wait(timeout=2))