三亚本地网站建设,校园内部网站建设方案,营销一体化平台,网站关键词排名优化应该怎么做用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下#xff0c;有许多系统命令可以让我们时刻监控系统运行的状态#xff0c;如ps#xff0c;top#xff0c;free等等。要获取这些系统信息#xff0c;Python可以通过subprocess模块调用并获取结果。但… 用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下有许多系统命令可以让我们时刻监控系统运行的状态如pstopfree等等。要获取这些系统信息Python可以通过subprocess模块调用并获取结果。但这样做显得很麻烦尤其是要写很多解析代码。在Python中获取系统信息的另一个好办法是使用psutil这个第三方模块。顾名思义psutil process and system utilities它不仅可以通过一两行代码实现系统监控还可以跨平台使用支持LinuxUNIXOSXWindows等是系统管理员和运维小伙伴不可或缺的必备模块。安装psutil如果安装了Anacondapsutil就已经可用了。否则需要在命令行下通过pip安装$ pip install psutil如果遇到Permission denied安装失败请加上sudo重试。获取CPU信息我们先来获取CPU的信息 import psutil psutil.cpu_count() # CPU逻辑数量4 psutil.cpu_count(logicalFalse) # CPU物理核心2# 2说明是双核超线程, 4则是4核非超线程统计CPU的用户系统空闲时间 psutil.cpu_times()scputimes(user10963.31, nice0.0, system5138.67, idle356102.45)再实现类似top命令的CPU使用率每秒刷新一次累计10次 for x in range(10):... print(psutil.cpu_percent(interval1, percpuTrue))...[14.0, 4.0, 4.0, 4.0][12.0, 3.0, 4.0, 3.0][8.0, 4.0, 3.0, 4.0][12.0, 3.0, 3.0, 3.0][18.8, 5.1, 5.9, 5.0][10.9, 5.0, 4.0, 3.0][12.0, 5.0, 4.0, 5.0][15.0, 5.0, 4.0, 4.0][19.0, 5.0, 5.0, 4.0][9.0, 3.0, 2.0, 3.0]获取内存信息使用psutil获取物理内存和交换内存信息分别使用 psutil.virtual_memory()svmem(total8589934592, available2866520064, percent66.6, used7201386496, free216178688, active3342192640, inactive2650341376, wired1208852480) psutil.swap_memory()sswap(total1073741824, used150732800, free923009024, percent14.0, sin10705981440, sout40353792)返回的是字节为单位的整数可以看到总内存大小是8589934592 8 GB已用7201386496 6.7 GB使用了66.6%。而交换区大小是1073741824 1 GB。获取磁盘信息可以通过psutil获取磁盘分区、磁盘使用率和磁盘IO信息 psutil.disk_partitions() # 磁盘分区信息[sdiskpart(device/dev/disk1, mountpoint/, fstypehfs, optsrw,local,rootfs,dovolfs,journaled,multilabel)] psutil.disk_usage(/) # 磁盘使用情况sdiskusage(total998982549504, used390880133120, free607840272384, percent39.1) psutil.disk_io_counters() # 磁盘IOsdiskio(read_count988513, write_count274457, read_bytes14856830464, write_bytes17509420032, read_time2228966, write_time1618405)可以看到磁盘/的总容量是998982549504 930 GB使用了39.1%。文件格式是HFSopts中包含rw表示可读写journaled表示支持日志。获取网络信息psutil可以获取网络接口和网络连接信息 psutil.net_io_counters() # 获取网络读写字节包的个数snetio(bytes_sent3885744870, bytes_recv10357676702, packets_sent10613069, packets_recv10423357, errin0, errout0, dropin0, dropout0) psutil.net_if_addrs() # 获取网络接口信息{ lo0: [snic(familyAF_INET: en1: [snic(familyAF_INET: en0: [...], en2: [...], bridge0: [...]} psutil.net_if_stats() # 获取网络接口状态{ lo0: snicstats(isupTrue, duplexNIC_DUPLEX_UNKNOWN: en0: snicstats(isupTrue, duplexNIC_DUPLEX_UNKNOWN: en1: snicstats(...), en2: snicstats(...), bridge0: snicstats(...)}要获取当前网络连接信息使用net_connections() psutil.net_connections()Traceback (most recent call last): ...PermissionError: [Errno 1] Operation not permittedDuring handling of the above exception, another exception occurred:Traceback (most recent call last): ...psutil.AccessDenied: psutil.AccessDenied (pid3847)你可能会得到一个AccessDenied错误原因是psutil获取信息也是要走系统接口而获取网络连接信息需要root权限这种情况下可以退出Python交互环境用sudo重新启动$ sudo python3Password: ******Python 3.8 ... on darwinType help, ... for more information. import psutil psutil.net_connections()[ sconn(fd83, family30, sconn(fd84, family30, sconn(fd93, family30, sconn(fd103, family30, sconn(fd105, family30, sconn(fd106, family30, sconn(fd107, family30, ... sconn(fd27, family2, ]获取进程信息通过psutil可以获取到所有进程的详细信息 psutil.pids() # 所有进程ID[3865, 3864, 3863, 3856, 3855, 3853, 3776, ..., 45, 44, 1, 0] p psutil.Process(3776) # 获取指定进程ID3776其实就是当前Python交互环境 p.name() # 进程名称python3.6 p.exe() # 进程exe路径/Users/michael/anaconda3/bin/python3.6 p.cwd() # 进程工作目录/Users/michael p.cmdline() # 进程启动的命令行[python3] p.ppid() # 父进程ID3765 p.parent() # 父进程3765, name p.children() # 子进程列表[] p.status() # 进程状态running p.username() # 进程用户名michael p.create_time() # 进程创建时间1511052731.120333 p.terminal() # 进程终端/dev/ttys002 p.cpu_times() # 进程使用的CPU时间pcputimes(user0.081150144, system0.053269812, children_user0.0, children_system0.0) p.memory_info() # 进程使用的内存pmem(rss8310784, vms2481725440, pfaults3207, pageins18) p.open_files() # 进程打开的文件[] p.connections() # 进程相关网络连接[] p.num_threads() # 进程的线程数量1 p.threads() # 所有线程信息[pthread(id1, user_time0.090318, system_time0.062736)] p.environ() # 进程环境变量{SHELL: /bin/bash, PATH: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:..., PWD: /Users/michael, LANG: zh_CN.UTF-8, ...} p.terminate() # 结束进程Terminated: 15 和获取网络连接类似获取一个root用户的进程需要root权限启动Python交互环境或者.py文件时需要sudo权限。psutil还提供了一个test()函数可以模拟出ps命令的效果$ sudo python3Password: ******Python 3.6.3 ... on darwinType help, ... for more information. import psutil psutil.test()USER PID %MEM VSZ RSS TTY START TIME COMMANDroot 0 24.0 74270628 2016380 ? Nov18 40:51 kernel_taskroot 1 0.1 2494140 9484 ? Nov18 01:39 launchdroot 44 0.4 2519872 36404 ? Nov18 02:02 UserEventAgentroot 45 ? 2474032 1516 ? Nov18 00:14 syslogdroot 47 0.1 2504768 8912 ? Nov18 00:03 kextdroot 48 0.1 2505544 4720 ? Nov18 00:19 fseventsd_appleeven 52 0.1 2499748 5024 ? Nov18 00:00 appleeventsdroot 53 0.1 2500592 6132 ? Nov18 00:02 configd...