当前位置: 首页 > news >正文

python自动化运维

1 系统性能信息模块psutil

  • psutl是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。
  • 它主要应用于系统监控,分析和限制系统资源及进程的管理。
# 这是一个外部模块,需要下载,通过指定源下载
pip3 install psutil -i https://mirrors.aliyun.com/pypi/simple/
import psutil

1.1 内存信息

memory = psutil.virtual_memory()
print(f'内存总大小:{memory.total} bytes')
print(f'已使用内存:{memory.used} bytes')
print(f'空闲内存:{memory.free} bytes')
print(f'内存使用率:{memory.percent}%')
# 获取交互分区信息
# print(f'交换分区信息:{psutil.swap_memory()}')

1.2 CPU信息

# 不写percpu=True,默认获取的是简略信息
cpu_info=psutil.cpu_times()
# cpu_info=psutil.cpu_times(percpu=True)
print(cpu_info)
print(f'用户的cpu时间比:{psutil.cpu_times().user}')
print(f'cpu逻辑个数:{psutil.cpu_count()}')
print(f'cpu物理个数:{psutil.cpu_count(logical=False)}')

1.3 磁盘信息

print(f'磁盘完整信息:{psutil.disk_partitions()}')
print(f'/分区使用情况:{psutil.disk_usage('/')}')
print(f'磁盘的IO个数,读写信息:{psutil.disk_io_counters()}')
print(f'每个磁盘的IO个数,读写信息:{psutil.disk_io_counters(perdisk=True)}')

1.4 网络信息

# 获取当前系统中所用网络信息
print(psutil.net_connections())
print(f'网络的总IO信息(网络利用率):{psutil.net_io_counters()}')
print(f'每个网络接口的IO信息:{psutil.net_io_counters(pernic=True)}')
print(f'网络信息:{psutil.net_if_addrs()}')
print(f'网络利用率:{psutil.net_if_stats()}')

1.5 用户登录信息

print(f'当前登录系统用户信息:{psutil.users()}')
print(f'开机时间(当前用户登录时间),默认时间戳格式:{psutil.boot_time()}')
print(f'开机时间,指定格式:{datetime.datetime.fromtimestamp(psutil.boot_time()).strftime('%Y-%m-%d %H:%M:%S')}')

1.6 系统进程信息

print(f'列出所有进程ID:{psutil.pids()}')
print(f'获取指定进程号信息:{psutil.Process(10884)}')
print(f'获取指定进程名称:{psutil.Process(10884).name()}')
p=psutil.Process(10884)
print(f'获取指定进程名称:{p.name()}')
print(f'获取指定进程状态:{p.status()}')
print(f'父进程:{p.parent()}')
print(f'子进程:{p.children()}')
print(f'进程启动时间(时间戳):{p.create_time()}')
print(f'进程的内存使用率:{p.memory_percent()}')
print(f'获取进程bin路径:{p.exe()}')
print(f'获取进程绝对路径:{p.cwd()}')
print(f'进程的IO信息:{p.io_counters()}')

1.7 Windows系统下的输出

import subprocess,platform
# 检测操作系统
# print(platform.system())
if platform.system()=='Windows':command=["cmd","/c","dir"]
else:command=["ls","-l"]
process=subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE,text=True)
stdout,stderr=process.communicate()
print(stdout)

2 IP地址处理模块IPy

pip3 install IPy -i https://mirrors.aliyun.com/pypi/simple/
import IPy

2.1 区分IP地址类型

v1="192.168.1.1"# 不要添加子网掩码
v2="123a:c562:1230:9423:adeb:ef03:0000:9536"
print(IPy.IP(v1).version())
print(IPy.IP(v2).version())

2.2 网段IP信息

ip4="192.168.100.0/26"
# 计算网段的ip个数
print(IPy.IP(ip4).len())
# 输出网段ip清单
for i in IPy.IP(ip4):print(i)

2.3 计算所在网段

print(IPy.IP("192.168.100.100").make_net("255.255.255.192"))
print(IPy.IP("192.168.1.0-192.168.1.127",make_net=True))

2.4 当前网段可用主机

print(IPy.IP('192.168.1.0/24').strNormal(0))
print(IPy.IP('192.168.1.0/24').strNormal(1))
print(IPy.IP('192.168.1.0/24').strNormal(2))
print(IPy.IP('192.168.1.0/24').strNormal(3))

2.5 判断 IP地址和网段是否包含于另一个网段中

# 判断网址在某个网段中
print(IPy.IP('192.168.1.120') in IPy.IP('192.168.1.0/24'))
# 判断网段在某个网段中
print(IPy.IP('192.168.1.0/25') in IPy.IP('192.168.1.0/24'))

2.6 判断两个网段是否存在重叠

print(IPy.IP('192.168.1.0/25').overlaps(IPy.IP('192.168.1.0/24')))

3 系统批量运维管理器paramiko

  • paramiko 是基于Python 实现的SSH2远程安全连接,支持认证及密钥方式。
  • 可以实现远程命令执行、文件传输、中间SSH代理等功能,相对于Pexpect,封装的层次更高,更贴近SSH协议的功能。

3.1 paramiko的核心组件

  • SSHClient类
  • SFTPClient类

3.2 SSHClient类

  • SSHClient类是SSH服务会话的高级表示,该类封装了传输(transport)、通道(channel)及SFTPClient的校验、建立的方法,通常用于执行远程命令
  • 常用方法:

3.2.1 connect方法

  • 作用:实现远程SSH连接并校验
  • 格式:connect(self,hostname,port=22,username=None,password=None,pkey=None,key_filename=None,timeout=None,allow_agent=True,look_for_keys=True,compress=False)
  • 参数说明:
    • hostname(str类型):连接的目标主机的IP地址
    • port(int类型):连接目标主机的端口,默认22
    • username(str类型):校验的用户名
    • password(str类型):密码
    • pkey(pkey类型):私钥,用于身份验证
    • key_filename(str or list(str)类型):一个文件名或文件名的列表,用于私钥的身份验证
    • timeout(float类型):TCP连接的超时时间
    • allow_agent=True(bool类型):设置为False时,用于禁止连接到SSH代理
    • look_for_keys(bool类型):设置为False时,用于禁止在~/.ssh中搜索私钥文件
    • compress(bool类型):设置为True时打开压缩

3.2.2 set_missing_host_key_policy方法

  • p设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种,分别是:
    • AutoAddPolicy:自动添加主机名及主机密钥到本地HostKeys对象,并将其保存(实验环境使用)
    • RejectPolicy(默认):自动拒绝未知的主机名和密钥(生产环境使用)、
    • WarningPolicy:用于记录一个未知的主机密钥的Python警告,并接受它,功能上与AutoAddPolicy相似,但未知主机会有告警。

3.2.3 exec_command 方法

  • 远程命令执行方法,该命令的输入与输出流为标准输人(stdin)、输出(stdout)、错误(stderr)的Python文件对象。
  • 语法:exec_command(self, command, bufsize=-1)
  • 参数说明:
    • command(str类型):执行的命令
    • bufsize(int类型):文件缓冲区大小,默认为-1(不限制)

3.2.4 示例:

# pip3 install paramiko -i https://mirrors.aliyun.com/pypi/simple/
import paramiko,sys
hostname1='192.168.40.131'
port1=22
username1='root'
password1='root'
# 创建日志文件
paramiko.util.log_to_file('syslogin.log')
# 创建一个ssh客户端对象
ssh_cliet=paramiko.SSHClient()
# 设置主动接受未知主机密钥的策略
ssh_cliet.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh_cliet.connect(hostname=hostname1,\port=port1,\username=username1,\password=password1,\allow_agent=False)# 执行指令,获取信息
stdin,stdout,stderr=ssh_cliet.exec_command('freee -m')
# 解析输出错误信息
for line in stderr:print(line)
# 解析输出正确信息
with open('stdin.txt', 'w', encoding='utf-8') as f1:sys.stdout=f1for line in stdout:print(line)
# 关闭输入
stdin.close()
# 关闭ssh客户端
ssh_cliet.close()

3.3 SFTPClient类

  • SFTPClient作为一个SFTP 客户端对象,根据SSH传输协议的sftp 会话,实现远程文件操作,比如文件上传、下载、权限、状态等操作。

3.3.1 from_transport方法

  • 创建一个已连通的SFTP 客户端通道
  • 语法:from_transport(t)
  • 参数说明:
    • t:一个已通过验证的传输对象
  • 示例:
client=paramiko.Transport((hostname1,port1))
client.connect(username=username1,password=password1)
sftp=paramiko.SFTPClient.from_transport(client)

3.3.2 put方法

  • 上传本地文件到远程SFTP服务端
  • 语法:put(self, localpath,remotepath, callback=None, confirm=True)
  • 参数说明:
    • localpath(str类型):需上传的本地文件(源)
    • remotepath(str类型):远程路径(目标)
    • callback(function(int,int)):获取已接收的字节数及总传输字节数,以便回调函数调用默认为 None
    • confirm(bool类型):文件上传完毕后是否调用stat()方法,以便确认文件的大小。

3.3.3 get方法

  • 从远程 SFTP 服务端下载文件到本地
  • 语法:get(self, remotepath, localpath, callback=None)
  • 参数说明:
    • remotepath(str 类型):需下载的远程文件(源)
    • localpath(str 类型):本地路径(目标)
    • callback(function(int,int)):获取已接收的字节数及总传输字节数,以便回调函数调用,默认为None。

3.3.4 其它方法

  • mkdir:在SFTP 服务器端创建目录
sftp.mkdir("/home/userdir",0755)
  • chdir:进入指定的文件夹中
  • getcwd():查看当前目录,需要先使用(chdir),才能查看
  • remove():删除SFTP服务器端指定目录
  • rename():重命名SFTP服务器端文件或目录
  • stat():获取远程SFTP服务器端指定文件信息
  • listdir():获取远程SFTP服务器端指定目录列表,以的列表(List)形式返回

3.3.5 示例

import paramiko
hostname1='192.168.40.131'
port1=22
username1='root'
password1='root'
try:client=paramiko.Transport((hostname1,port1))client.connect(username=username1,password=password1)sftp=paramiko.SFTPClient.from_transport(client)# 上传文件,相对路径地点为用户家目录# sftp.put('syslogin.log','/test/syslogin.log')# 下载文件# sftp.get('/test/1.txt','D:/333/0.txt')# 创建目录# sftp.mkdir('/test/userdir')# 重命名文件或目录# sftp.rename('/test/userdir','/test/testdir')# sftp.rename('/test/3.txt','/test/12.txt')# 删除目录,只能删除空目录# sftp.rmdir('/test/testdir')# 读取文件属性信息# print(sftp.stat('/test/12.txt'))# 查看目录下的文件列表print(sftp.listdir('./'))# 查看当前目录print(sftp.getcwd())# 进入指定目录sftp.chdir('.')print(sftp.getcwd())sftp.chdir('/test/abc')print(sftp.getcwd())client.close()
except Exception as err:print(err)

4 定时任务调度框架APScheduler

  • APScheduler 的全称是AdvancedPythonScheduler。它是一个轻量级的Python定时任务调度框架。
  • APScheduler 支持三种调度任务:
    • 固定时间间隔
    • 固定时间点(日期)
    • Linux 下的 Crontab 命令

4.1 APScheduler 基本使用方法

4.1.1 创建调度器对象

  • 使用APScheduler需要先创建一个调度器对象,可以选择使用不同的调度器类来创建不同类型的调度器,例如BlockingScheduler、BackgroundScheduler等。
scheduler=BlockingScheduler()

4.1.2 定义任务函数

  • 该函数将会被周期性地调用
def job():print('Hello World')

4.1.3 添加任务

  • 使用调度器对象的add_job方法添加任务。可以指定任务函数、触发器类型、触发器参数等信息
scheduler.add_job(job,'interval',seconds=5)
  • 在调用scheduler.add_job()方法添加任务时,第二个参数可以传递一个触发器类型,表示何时触发该任务。
    • interval是APScheduler中的一种触发器类型,表示周期性地执行任务。
      需要指定任务执行的时间间隔

4.1.4 启动调度器

  • 使用start方法启动调度器,开始周期性地执行任务
scheduler.start()

4.1.5 示例

  • 无参定时任务
# pip3 install APScheduler -i https://mirrors.aliyun.com/pypi/simple/
from apscheduler.schedulers.background import BlockingScheduler
def task():# 创建定时任务的调度器对象scheduler=BlockingScheduler()# 定义定时任务def job():print('Hello World')# 向调度器中添加定时任务scheduler.add_job(job,'interval',seconds=5)# 启动定时任务调度器scheduler.start()
task()
  • 有参定时任务
# pip3 install APScheduler -i https://mirrors.aliyun.com/pypi/simple/
from apscheduler.schedulers.background import BlockingScheduler
def task():# 创建定时任务的调度器对象scheduler=BlockingScheduler()# 定义定时任务def job(name,age):print(f'{name} is {age}岁:Hello World')# 向调度器中添加定时任务scheduler.add_job(job,'interval',seconds=5,args=['tom',3])# 启动定时任务调度器scheduler.start()
task()
  • 定时任务的多种执行方式
def task():# 创建定时任务的调度器对象scheduler=BlockingScheduler()# 定义定时任务def job():print('Hello World')# 没5秒执行一次# scheduler.add_job(job,'interval',seconds=5)# 在特定的日期和时间执行一次任务scheduler.add_job(job,'date',run_date='2025-7-2 11:59:59')# 在每天午夜执行scheduler.add_job(job,'cron',hour=0,minute=0)# 启动定时任务调度器scheduler.start()
task()
http://www.dtcms.com/a/265075.html

相关文章:

  • Redis基础(2):Redis常见命令
  • 多模态DeepSeek大模型的本地化部署
  • Colormind:优秀大模型赋能国产求解器,打造自主可控建模平台
  • 数学建模_拟合
  • 【Erdas实验教程】026:遥感图像辐射增强(去条带处理)
  • IDEA2025 Version Control 窗口 local changes显示
  • JavaScript 性能优化实战:减少 DOM 操作引发的重排与重绘
  • 操作系统考试大题-处理机调度算法-详解-2
  • 代码实现特殊的字段的基本功能
  • 用Rust编写的开源支付解决方案——Hyperswitch
  • springboot集成达梦数据库,取消MySQL数据库,解决问题和冲突
  • nohup java -jar 命令启动jar包,项目仍然会挂掉或者停止运行的解决方案
  • C++——手撕智能指针、单例模式、线程池、String
  • Vue + RuoYi 前后端分离入门手册
  • [深度学习环境踩坑记录]ubuntu22.04安装RTX3060驱动,黑屏、桌面只有壁纸和鼠标,一顿折腾
  • javaWeb02-Tomcat
  • java.sql.SQLSyntaxErrorException: Unknown column ‘user_name‘ in ‘field list‘
  • YOLOv11剪枝与量化(一)模型压缩的必要性
  • Qt写入excel
  • 整流电路Multisim电路仿真实验汇总——硬件工程师笔记
  • Rust实现FasterR-CNN目标检测全流程
  • 教程:国内如何免费用Claude4+GPT4o生成高质量科研绘图
  • vue动态绑定样式
  • Kalibr解毒填坑(一):相机标定失败
  • 408第三季part1 - 操作系统 - 文件基本概念
  • 基于STM32的土豆种植自动化灌溉系统设计与实现
  • java依赖注入方法
  • 【C语言】知识总结·文件操作
  • Redis在项目中的使用
  • 在移动端使用 Tailwind CSS (uniapp)