跳到主要内容

边学习语法边测试脚本

最后更新于:

边学习语法边测试脚本

给我出一份关于 运维方向的 python学习指导,我想在学习python语法的同时,可以做一些脚本或者工具,让自己有成就感,这样学习起来就不会很枯燥了。

运维方向 Python 学习路线(边学语法边做脚本,全程有成就感)

核心思路:按语法难度分层,每学一个知识点就写一个运维实用小脚本,从「能跑通」到「能解决工作问题」,循序渐进不枯燥。全程聚焦运维真实场景:文件操作、日志处理、服务器监控、批量执行、备份、告警等。

一、前期准备(5分钟搞定)

  1. 环境:安装 Python3.8+(别用2.x),VSCode 编辑器
  2. 工具:终端 + pip(Python包管理器)
  3. 原则:先跑通脚本,再抠语法细节,做完一个脚本就标记「完成」,积累成就感

第一阶段:Python基础语法 + 入门运维脚本(1周,0基础可学)

必学语法(运维核心基础)

变量、字符串/列表/字典、if/else 条件判断、for/while 循环、函数def、文件读写、异常处理try/except

配套实战脚本(做完就能用)

脚本1:批量重命名文件(解决运维文件杂乱问题)

场景:服务器上日志/备份文件命名不规范,一键批量重命名

 1import os
 2
 3# 目标目录(改成你的路径)
 4target_dir = "/tmp/test_logs"
 5# 前缀自定义
 6prefix = "app_log_"
 7
 8for index, filename in enumerate(os.listdir(target_dir)):
 9    # 拼接新文件名
10    new_name = f"{prefix}{index}.log"
11    # 重命名
12    os.rename(os.path.join(target_dir, filename), os.path.join(target_dir, new_name))
13
14print("批量重命名完成!")

脚本2:简易日志清理脚本(删除过期日志)

场景:服务器日志占满磁盘,自动删除7天前日志

 1import os
 2import time
 3
 4log_path = "/var/log/nginx"
 5# 7天前的时间戳
 6seven_days_ago = time.time() - 7 * 24 * 60 * 60
 7
 8for file in os.listdir(log_path):
 9    file_path = os.path.join(log_path, file)
10    # 判断文件修改时间
11    if os.path.isfile(file_path) and os.path.getmtime(file_path) < seven_days_ago:
12        os.remove(file_path)
13        print(f"已删除过期日志:{file}")

脚本3:服务器基础信息查看

场景:快速查看本机IP、磁盘根目录使用率

 1import os
 2import socket
 3
 4# 查看本机IP
 5hostname = socket.gethostname()
 6ip = socket.gethostbyname(hostname)
 7print(f"主机名:{hostname},IP:{ip}")
 8
 9# 查看磁盘根目录使用情况(Linux)
10disk_info = os.popen("df -h /").read()
11print("磁盘根目录信息:")
12print(disk_info)

第二阶段:Python标准库 + 日常运维脚本(1-2周)

必学标准库(运维必用,无需额外安装)

os/shutil(文件/目录)、subprocess(执行shell命令)、datetime(时间)、logging(日志)、sys(系统参数)

配套实战脚本

脚本1:自动备份目录(按日期打包)

场景:定时备份配置文件/代码目录,生成带日期的备份包

 1import shutil
 2import datetime
 3
 4# 源目录、备份目录
 5source = "/etc/nginx"
 6backup_dir = "/data/backup"
 7# 备份文件名(日期+目录名)
 8today = datetime.datetime.now().strftime("%Y%m%d")
 9backup_name = f"nginx_backup_{today}.tar.gz"
10
11# 打包备份
12shutil.make_archive(base_name=f"{backup_dir}/{backup_name}", format='gztar', root_dir=source)
13print(f"备份完成:{backup_dir}/{backup_name}")

脚本2:执行shell命令并获取结果

场景:在Python中调用Linux命令,统一收集服务器信息

 1import subprocess
 2
 3# 执行shell命令,捕获输出
 4def run_cmd(cmd):
 5    result = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8")
 6    return result.stdout, result.stderr
 7
 8# 示例:查看CPU信息
 9cpu_info, err = run_cmd("lscpu | grep 'Model name'")
10print("CPU型号:", cpu_info.strip())
11
12# 示例:查看内存
13mem_info, _ = run_cmd("free -h")
14print("内存信息:\n", mem_info)

脚本3:日志关键词统计(排查错误)

场景:统计日志中ERROR/Exception出现次数,快速定位问题

 1error_count = 0
 2log_file = "/var/log/messages"
 3
 4with open(log_file, "r", encoding="utf-8", errors="ignore") as f:
 5    for line in f:
 6        if "ERROR" in line or "Exception" in line:
 7            error_count += 1
 8            print(f"错误行:{line.strip()}")
 9
10print(f"日志中总错误数:{error_count}")

第三阶段:第三方核心库 + 自动化运维脚本(2-3周,质变阶段)

必装第三方库(运维神器)

1pip install psutil paramiko requests pyyaml
  • psutil:获取系统CPU/内存/磁盘/网络实时数据
  • paramiko:SSH远程连接服务器,批量执行命令
  • requests:调用接口、监控HTTP服务、发告警
  • pyyaml:解析YAML配置文件(运维常用配置格式)

配套实战脚本

脚本1:系统资源监控脚本(完整版)

场景:实时监控CPU、内存、磁盘使用率,超阈值提醒

 1import psutil
 2
 3# 获取CPU使用率
 4cpu_usage = psutil.cpu_percent(interval=1)
 5# 获取内存使用率
 6mem = psutil.virtual_memory()
 7mem_usage = mem.percent
 8# 获取磁盘根目录使用率
 9disk = psutil.disk_usage("/")
10disk_usage = disk.percent
11
12print(f"CPU使用率:{cpu_usage}%")
13print(f"内存使用率:{mem_usage}%")
14print(f"磁盘使用率:{disk_usage}%")
15
16# 阈值告警
17if cpu_usage > 80 or mem_usage > 85 or disk_usage > 90:
18    print("⚠️  资源使用率过高,请检查服务器!")

脚本2:SSH批量远程执行命令(多服务器运维)

场景:批量给10台服务器执行相同命令(如查看负载、重启服务)

 1import paramiko
 2
 3# 服务器列表
 4servers = [
 5    {"host": "192.168.1.10", "user": "root", "pwd": "your_password"},
 6    {"host": "192.168.1.11", "user": "root", "pwd": "your_password"},
 7]
 8# 要执行的命令
 9cmd = "uptime"
10
11for server in servers:
12    ssh = paramiko.SSHClient()
13    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
14    ssh.connect(server["host"], username=server["user"], password=server["pwd"])
15    stdin, stdout, stderr = ssh.exec_command(cmd)
16    print(f"\n=== {server['host']} 执行结果 ===")
17    print(stdout.read().decode("utf-8"))
18    ssh.close()

脚本3:HTTP接口监控 + 钉钉告警

场景:监控业务接口是否正常,异常自动发钉钉群告警

 1import requests
 2
 3def check_api(url):
 4    try:
 5        res = requests.get(url, timeout=5)
 6        if res.status_code == 200:
 7            return True, "接口正常"
 8        else:
 9            return False, f"状态码异常:{res.status_code}"
10    except Exception as e:
11        return False, f"请求失败:{str(e)}"
12
13# 监控接口
14api_url = "https://www.baidu.com"
15status, msg = check_api(api_url)
16
17if not status:
18    # 钉钉机器人Webhook(替换成你的)
19    ding_url = "https://oapi.dingtalk.com/robot/send?access_token=xxx"
20    data = {"msgtype": "text", "text": {"content": f"⚠️ 接口告警:{msg}"}}
21    requests.post(ding_url, json=data)
22    print("告警已发送!")
23else:
24    print("接口正常")

第四阶段:进阶综合 + 完整运维小工具(1个月+)

必学进阶知识点

多线程/多进程、数据库操作(pymysql)、简易Web界面(Flask)、定时任务

配套实战脚本(完整工具)

  1. 服务器批量巡检工具:整合CPU/内存/磁盘/端口,生成巡检报告
  2. MySQL自动备份脚本:定时备份数据库,上传到对象存储
  3. 简易运维资产平台:用Flask做Web界面,管理服务器IP/账号/配置
  4. 定时监控告警工具:结合schedule库,定时巡检+邮件/钉钉告警

三、学习习惯(保持成就感的关键)

  1. 小步快跑:每天学1个语法+写1个小脚本,不贪多
  2. 搭建自己的工具库:把写好的脚本存到Git,后续工作直接复用
  3. 先能用再优化:不用追求代码优雅,能解决问题就有价值
  4. 结合工作场景:把脚本改成自己服务器的路径/配置,真实可用

四、后续进阶方向

  1. 结合Ansible + Python 做批量自动化
  2. 学习Docker/Podman SDK 管理容器
  3. 学习K8s Python客户端 管理集群
  4. 用Python写Prometheus监控脚本、ELK日志分析工具

需要我把某一个脚本扩展成完整可直接部署的版本(比如带配置文件、日志、异常处理的完整版)吗?

最新文章