Python常用模块

        在运维工作中,Python 因其简洁、高效和丰富的库生态成为自动化运维的首选语言。熟练掌握常用模块能极大提升工作效率。本篇将聚焦运维工程师日常工作中频繁使用的核心模块,并通过具体实例展示其应用场景。

一、核心模块:系统与文件操作

模块名 主要功能 典型运维场景
os 操作系统接口 文件和目录管理、环境变量读取、执行系统命令
sys 系统相关功能 命令行参数解析、系统版本信息、标准输入输出控制
shutil 高级文件操作 文件复制、移动、归档、目录树删除
glob 文件路径匹配 批量查找符合规则的文件路径
pathlib 面向对象路径 路径操作(替代 os.path

1. os 模块:基础系统交互

import os

# 检查文件/目录是否存在
if os.path.exists("/var/log/nginx"):
    print("Nginx日志目录存在")

# 遍历目录
for root, dirs, files in os.walk("/etc"):
    print(f"当前目录: {root}")
    print(f"包含子目录: {dirs}")
    print(f"包含文件: {files}")

# 执行Shell命令(注意安全风险)
os.system("df -h")  # 查看磁盘使用情况

2. shutil 模块:高效文件管理

import shutil

# 复制目录(保留元数据)
shutil.copytree("src_backup", "dst_backup") 

# 移动文件
shutil.move("/tmp/old.log", "/archive/") 

# 删除整个目录
shutil.rmtree("/tmp/expired_data") 

# 磁盘使用统计(需配合 os)
total, used, free = shutil.disk_usage("/")
print(f"磁盘使用率: {used/total:.2%}")

二、进程与命令执行

模块名 主要功能 典型运维场景
subprocess 创建子进程 安全执行系统命令、获取输出
psutil 系统进程和资源监控 资源监控、进程管理
signal 信号处理 优雅停止进程

1. subprocess:安全的命令执行

import subprocess

# 获取命令输出(推荐方式)
result = subprocess.run(
    ["ls", "-l", "/var/log"], 
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True
)
if result.returncode == 0:
    print("文件列表:\n", result.stdout)
else:
    print("错误:", result.stderr)

# 实时输出(流式处理)
process = subprocess.Popen(
    ["tail", "-f", "/var/log/syslog"],
    stdout=subprocess.PIPE
)
for line in iter(process.stdout.readline, b''):
    print(line.decode().strip())

2. psutil:资源监控神器

import psutil

# 获取CPU使用率
cpu_percent = psutil.cpu_percent(interval=1)
print(f"当前CPU使用率: {cpu_percent}%")

# 内存信息
mem = psutil.virtual_memory()
print(f"内存总量: {mem.total / 1024**3:.2f} GB")
print(f"已使用: {mem.used / 1024**3:.2f} GB")

# 遍历进程
for proc in psutil.process_iter(['pid', 'name']):
    if proc.info['name'] == 'nginx':
        print(f"Nginx进程ID: {proc.info['pid']}")

三、日志与配置管理

模块名 主要功能 典型运维场景
logging 日志记录 脚本日志管理
configparser INI配置文件解析 读取应用配置
json JSON数据处理 API交互、配置文件解析
yaml YAML数据处理 复杂配置文件解析(如K8s)

1. logging:专业的日志记录

import logging

# 基础配置
logging.basicConfig(
    filename='app.log',
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

# 使用示例
logger = logging.getLogger('backup_tool')
logger.info("开始执行数据库备份")
try:
    # 备份操作...
    logger.info("备份成功")
except Exception as e:
    logger.error(f"备份失败: {str(e)}")

2. configparser:管理INI配置

```示例配置文件(app.conf)` [database] host = db.example.com port = 3306 user = admin password = secret

[logging] level = INFO


```python
from configparser import ConfigParser

config = ConfigParser()
config.read('app.conf')

db_host = config.get('database', 'host')
log_level = config.get('logging', 'level')
print(f"数据库地址: {db_host}, 日志级别: {log_level}")

四、网络与通信

模块名 主要功能 典型运维场景
socket 底层网络接口 自定义协议通信
requests HTTP客户端 REST API调用
paramiko SSH协议客户端 远程服务器管理
smtplib SMTP邮件发送 告警通知

1. requests:HTTP请求库

import requests

# 查询API状态
response = requests.get("https://api.example.com/health")
if response.status_code == 200:
    print("服务状态正常")
else:
    print(f"服务异常: {response.text}")

# 提交监控数据
payload = {'host': 'web01', 'cpu': 85, 'memory': 70}
requests.post("http://monitor.example.com/api/data", json=payload)

2. paramiko:SSH远程管理

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    ssh.connect('server01.example.com', username='ops', key_filename='/home/ops/.ssh/id_rsa')
    
    # 执行远程命令
    stdin, stdout, stderr = ssh.exec_command('docker ps --format "{{.Names}}"')
    containers = stdout.read().decode().splitlines()
    print(f"运行中的容器: {containers}")
    
finally:
    ssh.close()

五、数据处理与压缩

模块名 主要功能 典型运维场景
csv CSV文件处理 导出/导入报表数据
gzip GZIP压缩 日志压缩存储
zipfile ZIP归档 批量文件打包
datetime 日期时间处理 日志时间分析

1. gzip:日志压缩

import gzip
import shutil

# 压缩日志文件
with open('/var/log/app.log', 'rb') as f_in:
    with gzip.open('/backup/app.log.gz', 'wb') as f_out:
        shutil.copyfileobj(f_in, f_out)

2. datetime:时间计算

from datetime import datetime, timedelta

# 计算7天前的日期
week_ago = datetime.now() - timedelta(days=7)
print(f"清理早于: {week_ago.strftime('%Y-%m-%d')} 的日志")

# 时间字符串解析
log_time = datetime.strptime("2023-10-01 12:30:00", "%Y-%m-%d %H:%M:%S")

六、实用工具模块

模块名 主要功能 典型运维场景
argparse 命令行参数解析 脚本参数规范化
re 正则表达式 日志过滤、文本提取
time 时间相关功能 延时、计时

1. argparse:命令行工具开发

import argparse

parser = argparse.ArgumentParser(description='数据库备份工具')
parser.add_argument('--host', required=True, help='数据库主机')
parser.add_argument('--port', type=int, default=3306, help='数据库端口')
parser.add_argument('-v', '--verbose', action='store_true', help='详细输出')

args = parser.parse_args()
print(f"连接至 {args.host}:{args.port}")
if args.verbose:
    print("详细模式已启用")

2. re:日志分析

import re

log_line = "2023-10-01 12:30:00 ERROR [app] Connection timeout (host: db01)"

# 提取错误级别和时间
match = re.search(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\w+)', log_line)
if match:
    print(f"时间: {match.group(1)}, 级别: {match.group(2)}")

# 查找所有IP地址
text = "访问IP: 192.168.1.1, 转发至 10.0.0.2"
ips = re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', text)
print("找到IP:", ips)

七、总结与进阶方向

运维工作中 Python 模块的使用远不止于此,随着场景深入,以下方向值得关注:

  1. 自动化运维框架

    • Fabric / Invoke:任务执行框架
    • Ansible:基础设施即代码(通过 ansible-api
  2. 容器与云管理

    • docker:Docker SDK
    • kubernetes:K8s 客户端
  3. 监控与告警

    • prometheus_client:Prometheus 指标暴露
    • statsd:StatsD 指标上报
  4. 异步处理

    • asyncio:异步I/O框架
    • aiohttp:异步HTTP客户端/服务端

附录:运维常用模块速查表

模块 用途简述
os 系统目录/文件操作
subprocess 安全执行命令
psutil 系统资源监控
paramiko SSH远程控制
requests HTTP API调用
logging 日志记录管理
yaml/json 配置文件解析
argparse 命令行参数解析
re 日志过滤/文本提取

:以上代码示例均为简化版,实际生产环境需增加异常处理、日志记录和安全防护措施。通过灵活组合这些模块,可构建出高效可靠的运维自动化体系。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐