Python_platform&psutil
platform
platform 模块可跨平台查看操作系统、系统版本位数、计算机类型名称内核等一系列信息。
平台架构
platform.machine()
返回平台架构,若无法确定,则返回空字符串。
主机名称
platform.node()
返回主机名称,如果无法确定该值,则返回空字符串。
系统版本
platform.platform(aliased = 0,terse = 0)
如果aliased为True,则该函数将使用不同平台的别名来报告与其常用名称不同的系统名称,例如SunOS将被报告为Solaris。 system_alias()函数用于实现。
将terse设置为True会导致该功能仅返回识别平台所需的绝对最小信息。
处理器名称
platform.processor()
返回处理器名称。
系统名称
platform.system()
返回系统/操作系统名称,例如“Linux”,“Windows”或“Java”。如果无法确定该值,则返回空字符串。
Python版本
platform.python_version()
返回python的版本
psutil
psutil是一个开源的跨平台的第三方库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等。此外,psutil还可以用来进行进程管理,包括判断进程是否存在、获取进程列表、获取进程详细信息等。而且psutil还提供了许多命令行工具提供的功能,包括:ps,top,lsof,netstat,ifconfig, who,df,kill,free,nice,ionice,iostat,iotop,uptime,pidof,tty,taskset,pmap。
psutil是一个跨平台的库,在官方网站上查到其支持如下操作系统。
- Linux
- Windows
- OSX
- FreeBSD
- OpenBSD
- NetBSD
- Sun Solaris
- AIX
根据函数的功能,主要分为CPU、磁盘、内存、网络几类,下面将会总几个方面来介绍psutil提供的功能函数。
CPU信息
函数 | 描述 |
---|---|
psutil.cpu_count() | cpu_count(,[logical]):默认返回逻辑CPU的个数,当设置logical的参数为False时,返回物理CPU的个数。 |
psutil.cpu_percent() | cpu_percent(,[percpu],[interval]):返回CPU的利用率,percpu为True时显示所有物理核心的利用率,interval不为0时,则阻塞时显示interval执行的时间内的平均利用率 |
psutil.cpu_times() | cpu_times(,[percpu]):以命名元组(namedtuple)的形式返回cpu的时间花费,percpu=True表示获取每个CPU的时间花费 |
psutil.cpu_times_percent() | cpu_times_percent(,[percpu]):功能和cpu_times大致相同,看字面意思就能知道,该函数返回的是耗时比例。 |
psutil.cpu_stats() | cpu_stats()以命名元组的形式返回CPU的统计信息,包括上下文切换,中断,软中断和系统调用次数。 |
psutil.cpu_freq() | cpu_freq([percpu]):返回cpu频率 |
# 查看cpu个数 >>> import psutil >>> psutil.cpu_count() 8 >>> psutil.cpu_count(logical=False) 4 # 查看cpu利用率 >>> psutil.cpu_percent() 2.3 >>> psutil.cpu_percent(percpu=True) [5.6, 1.1, 2.7, 0.8, 1.4, 2.4, 1.8, 3.3] # 查看cpu时间花费 >>> cpu_time = psutil.cpu_times() >>> cpu_time scputimes(user=770.234375, system=563.203125, idle=18937.421875, interrupt=16.328125, dpc=16.265625) >>> cpu_time.user 770.234375 >>> psutil.cpu_times(percpu=True) [scputimes(user=130.96875, system=94.03125, idle=2167.96875, interrupt=12.9375, dpc=13.578125), scputimes(user=59.296875, system=50.671875, idle=2282.765625, interrupt=0.3125, dpc=0.21875), scputimes(user=132.890625, system=88.640625, idle=2171.203125, interrupt=0.578125, dpc=0.609375), scputimes(user=69.546875, system=60.5, idle=2262.6875, interrupt=0.3125, dpc=0.015625), scputimes(user=96.15625, system=71.671875, idle=2224.90625, interrupt=0.703125, dpc=0.375), sc putimes(user=66.828125, system=53.4375, idle=2272.46875, interrupt=0.34375, dpc=0.03125), scputimes(user=78.03125, system=57.875, idle=2256.828125, interrupt=0.34375, dpc=0.9375), scputimes(user=117.578125, system=78.671875, idle=2196. 484375, interrupt=0.34375, dpc=0.03125)] >>>
内存信息
函数 | 描述 |
---|---|
psutil.virtual_memory() | 以命名元组的形式返回内存使用情况,包括总内存,可用内存,内存利用率,buffer和cache等。单位为字节。 |
psutil.swap_memory() | 以命名元组的形式返回swap/memory使用情况,包含swap中页的换入和换出。 |
>>> psutil.virtual_memory() svmem(total=17104478208, available=11709865984, percent=31.5, used=5394612224, free=11709865984) >>> psutil.swap_memory() sswap(total=17179869184, used=627122176, free=16552747008, percent=3.7, sin=0, sout=0) >>>
Disk信息
函数 | 描述 |
---|---|
psutil.disk_io_counters() | disk_io_counters([perdisk]):以命名元组的形式返回磁盘io统计信息(汇总的),包括读、写的次数,读、写的字节数等。 当perdisk的值为True,则分别列出单个磁盘的统计信息(字典:key为磁盘名称,value为统计的namedtuple)。 |
psutil.disk_partitions() | disk_partitions([all=False]):以命名元组的形式返回所有已挂载的磁盘,包含磁盘名称,挂载点,文件系统类型等信息。 当all等于True时,返回包含/proc等特殊文件系统的挂载信息 |
psutil.disk_usage() | disk_usage(path):以命名元组的形式返回path所在磁盘的使用情况,包括磁盘的容量、已经使用的磁盘容量、磁盘的空间利用率等。 |
# 查看所有已挂在的磁盘 >>> dps = psutil.disk_partitions() >>> dps [sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260), sdiskpart(device='E:\\', mou ntpoint='E:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260)] # 查看磁盘的文件系统(其它属性一样可以如下获取) >>> dps[0].fstype 'NTFS' # 查看磁盘使用情况 >>> psutil.disk_usage('C:\\') sdiskusage(total=127308156928, used=64094932992, free=63213223936, percent=50.3) # 查看磁盘io统计汇总 >>> psutil.disk_io_counters() sdiskio(read_count=183635, write_count=75772, read_bytes=4239425536, write_bytes=1732332032, read_time=702, write_time=151) # 分别列出单个磁盘的io统计信息 >>> psutil.disk_io_counters(perdisk=True) {'PhysicalDrive0': sdiskio(read_count=138219, write_count=69428, read_bytes=2948144128, write_bytes=1693754880, read_time=91, write_time=26), 'PhysicalDrive1': sdiskio(read_count=45589, write_count=6920, read_bytes=1292055552, write_by tes=93351936, read_time=611, write_time=125)}
Network信息
函数 | 详情 |
---|---|
psutil.net_io_counter([pernic]) | 以命名元组的形式返回当前系统中每块网卡的网络io统计信息,包括收发字节数,收发包的数量、出错的情况和删包情况。当pernic为True时,则列出所有网卡的统计信息。 |
psutil.net_connections([kind]) | 以列表的形式返回每个网络连接的详细信息(namedtuple)。命名元组包含fd, family, type, laddr, raddr, status, pid等信息。kind表示过滤的连接类型,支持的值如下:(默认为inet) |
psutil.net_if_addrs() | 以字典的形式返回网卡的配置信息,包括IP地址和mac地址、子网掩码和广播地址。 |
psutil.net_if_stats() | 返回网卡的详细信息,包括是否启动、通信类型、传输速度与mtu。 |
psutil.users() | 以命名元组的方式返回当前登陆用户的信息,包括用户名,登陆时间,终端,与主机信息 |
psutil.boot_time() | 以时间戳的形式返回系统的启动时间 |
# 查看网卡信息统计 >>> psutil.net_io_counters() snetio(bytes_sent=9171727, bytes_recv=124127492, packets_sent=78822, packets_recv=181154, errin=0, errout=0, dropin=0, dropout=0) # 查看网卡配置信息 >>> net = psutil.net_if_addrs() >>> net {'本地连接': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='00-FF-A7-86-B2-28', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='169.254.244.217', netmask='255.255.0.0', broadcast=No ne, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::7213:3471:2959:ddff', netmask=None, broadcast=None, ptp=None)], '以太网 3' : [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='BC-EE-7B-8D-A9-66', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.3.114', netmask='255.255.255.0', broadcast=None, ptp=Non e), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='2408:8266:e0f:12d:b53c:b749:4a73:f1c9', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='2408:8266:e0f:12d:c51f:1708:73cd:180b', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::29f3:3f7d:7c6a:aaaf', netmask=None, broadcast=None, ptp=None)]} >>> net["以太网 3"] [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='BC-EE-7B-8D-A9-66', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.3.114', netmask='255.255.255.0', broadcast=None, ptp=None) , snicaddr(family=<AddressFamily.AF_INET6: 23>, address='2408:8266:e0f:12d:b53c:b749:4a73:f1c9', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='2408:8266:e0f:12d:c51f:1708:73cd:180b', ne tmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::29f3:3f7d:7c6a:aaaf', netmask=None, broadcast=None, ptp=None)] >>> net["以太网 3"][1].address '192.168.3.114' # 查看当前登录用户信息 >>> psutil.users() [suser(name='yb', terminal=None, host=None, started=1680691551.5526464, pid=None)]
进程信息
函数 | 详情 |
---|---|
psutil.pids() | 以列表的形式返回当前正在运行的进程 |
psutil.pid_exists(1) | 判断给点定的pid是否存在 |
psutil.process_iter() | 迭代当前正在运行的进程,返回的是每个进程的Process对象 |
psutil.Process() | 对进程进行封装,可以使用该类的方法获取进行的详细信息,或者给进程发送信号。 |
进程相关的方法:
- name:获取进程的名称
- cmdline:获取启动进程的命令行参数
- create_time:获取进程的创建时间(时间戳格式)
- num_fds:进程打开的文件个数
- num_threads:进程的子进程个数
- is_running:判断进程是否正在运行
- send_signal:给进程发送信号,类似与os.kill等
- kill:发送SIGKILL信号结束进程
- terminate:发送SIGTEAM信号结束进程
注:上面只是部分方法
# 以列表形式查看正在运行的进程 >>> psutil.pids() [0, 4, 124, 448, 556, 608, 632, 640, 728, 736, 800, 808, 884, 912, 992, 1016, 1068, 1116, 1172, 1180, 1184] # 查看进程运行状态,以布尔形式显示 >>> psutil.pid_exists(1) False >>> psutil.pid_exists(4) True # 迭代当前正在运行进程,查看列表中前2个实例的信息 >>> pis = psutil.process_iter() >>> pis <generator object process_iter at 0x000001FC1E9B59E0> >>> list(pis)[:2] [psutil.Process(pid=0, name='System Idle Process', status='running'), psutil.Process(pid=4, name='System', status='running')] >>> # 通过进程号实例化对象 >>> p = psutil.Process(4) # 4为进程的pid >>> p psutil.Process(pid=4, name='System', status='running') # 获取进程的名称 >>> p.name() 'System'
参考:https://www.cnblogs.com/iamjianghao/p/11894623.html