首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 运维中30个常用的库,提升效率

Python 运维中30个常用的库,提升效率

作者头像
用户11081884
发布2026-07-20 19:13:25
发布2026-07-20 19:13:25
1440
举报
文章被收录于专栏:科技专栏科技专栏

IT运维领域自动化已成为提升效率、保障系统稳定性的核心驱动力。Python凭借其简洁的语法、庞大的生态系统和强大的跨平台能力,成为自动化运维的首选语言。它不仅能够简化重复性任务,还能通过丰富的第三方库构建复杂的监控、部署和管理系统。本文将介绍30个在Python运维中至关重要的库,涵盖从基础系统操作到高级自动化编排的各个方面,每个库都配有背景说明、使用场景及实用的代码示例,为运维工程师和开发者提供参考。

1. psutil

背景与用途: psutil (process and system utilities)是一个跨平台库,用于获取系统运行的进程和系统资源(如CPU、内存、磁盘、网络)的利用率信息。它是系统监控和性能分析的基石。

使用说明:常用于编写监控脚本,实时获取系统负载,或集成到告警系统中。

代码示例

代码语言:javascript
复制
import psutil
# 获取CPU使用率
cpu_usage = psutil.cpu_percent(interval=1)
# 获取内存信息
memory_info = psutil.virtual_memory()
print(f'CPU使用率: {cpu_usage}%')
print(f'内存使用率: {memory_info.percent}%')

2. os

背景与用途Python的标准库之一,提供了与操作系统交互的丰富接口,用于执行文件和目录操作、环境变量管理以及执行系统命令。

使用说明:是几乎所有运维脚本的基础,用于路径拼接、文件检查、目录遍历等。

代码示例

代码语言:javascript
复制
import os
# 获取当前工作目录
current_dir = os.getcwd()
# 列出目录内容
file_list = os.listdir('/tmp')
# 执行系统命令
os.system('ls -l')

3. subprocess

背景与用途:用于生成新的子进程,连接其输入/输出/错误管道,并获取返回码。它比 os.system() 功能更强大、更安全。

使用说明:适用于需要与系统命令交互并捕获其输出的场景,如执行Shell脚本。

代码示例

代码语言:javascript
复制
import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)

4. shutil

背景与用途:高级的文件操作模块,提供了对文件集合进行复制、移动、删除等操作的接口,弥补了 os 模块在某些高级文件操作上的不足。

使用说明:常用于文件的批量复制、归档目录树等。

代码示例

代码语言:javascript
复制
import shutil
# 递归复制目录
shutil.copytree('/path/to/src', '/path/to/dst')
# 删除目录树
shutil.rmtree('/path/to/dir')

5. paramiko

背景与用途:一个基于PythonSSHv2协议实现库,支持远程命令执行、文件传输(SFTP)和SSH代理等功能。它是实现远程服务器管理的核心工具。

使用说明:用于编写需要SSH连接进行服务器批量配置、文件分发的脚本。

代码示例

代码语言:javascript
复制
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('192.168.1.1', username='admin', password='password')
stdin, stdout, stderr = client.exec_command('ls -l /tmp')
print(stdout.read().decode())
client.close()

6. fabric

背景与用途:一个基于Paramiko构建的高级库,旨在简化SSH连接和命令执行,通过定义任务(fabfile)来简化应用程序部署和系统管理。

使用说明:适合定义复杂的部署流程,将多个SSH操作封装成可重复执行的任务。

代码示例

代码语言:javascript
复制
from fabric import Connection
def deploy_app():
    conn = Connection(host='server_ip', user='user', connect_kwargs={'password': 'pass'})
    conn.run('cd /opt/app && git pull')
    conn.run('systemctl restart app_service')

7. ansible

背景与用途:一个开源的配置管理、应用部署和任务执行平台,使用YAML语言编写剧本(Playbook)。它基于Python实现,无需在目标主机安装代理,直接通过SSH工作。

使用说明:用于大规模基础设施的配置管理和应用部署,通过声明式剧本描述系统状态。

代码示例(Playbook)

代码语言:javascript
复制
- name: Install and start Nginx
  hosts: webservers
  become: yes
  tasks:
    - name: Install Nginx
      apt: name=nginx state=latest
    - name: Start Nginx
      service: name=nginx state=started

8. pexpect

背景与用途:可以理解为Linux expect 命令的Python封装,用于自动化与命令行程序(如ssh, ftp, telnet)的交互,无需人工干预。

使用说明:适用于需要自动应答密码提示、交互式命令的场景。

代码示例

代码语言:javascript
复制
import pexpect
child = pexpect.spawn('ssh user@hostname')
child.expect('password:')
child.sendline('your_password')
child.interact()

9. configparser

背景与用途Python标准库,用于读写INI格式的配置文件。

使用说明:管理应用程序或脚本的配置信息。

代码示例

代码语言:javascript
复制
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
db_host = config['database']['host']

10. PyYAML (yaml)

背景与用途:用于解析和生成YAML格式文件,YAML因其可读性好,常用于Ansible Playbook、Docker Compose等工具的配置文件。

使用说明:读写复杂的、结构化的配置文件。

代码示例

代码语言:javascript
复制
import yaml
with open('config.yaml') as f:
    data = yaml.safe_load(f)

11. filecmp

背景与用途Python标准库,用于比较文件和目录,检查它们是否相同。

使用说明:在备份、同步或部署时验证文件一致性。

代码示例

代码语言:javascript
复制
import filecmp
result = filecmp.cmp('file1.txt', 'file2.txt')
print(f'Files are identical: {result}')

12. difflib

背景与用途Python标准库,用于对比文本之间的差异,并生成可读的差异报告。

使用说明:比较配置文件版本、日志文件变化。

代码示例

代码语言:javascript
复制
import difflib
text1 = open('file1.cfg').readlines()
text2 = open('file2.cfg').readlines()
diff = difflib.unified_diff(text1, text2, lineterm='')
print('\n'.join(list(diff)))

13. requests

背景与用途:一个简单优雅的HTTP库,用于发送各种HTTP请求,是调用RESTful API、进行网络爬虫的必备工具。

使用说明:与Web服务、API网关进行交互,获取或提交数据。

代码示例

代码语言:javascript
复制
import requests
response = requests.get(' https://api.example.com/data')
data = response.json()

14. socket

背景与用途Python标准库,提供了底层网络接口(BSD套接字),用于创建网络连接、进行端口扫描或构建简单的网络服务。

使用说明:检查端口开放状态、实现简单的客户端/服务器通信。

代码示例(端口检查)

代码语言:javascript
复制
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('localhost', 80))
is_open = result == 0
sock.close()

15. smtplib

背景与用途Python标准库,用于发送电子邮件。常与监控脚本结合,发送告警邮件。

使用说明:在系统监控、任务完成或失败时发送通知邮件。

代码示例

代码语言:javascript
复制
import smtplib
from email.mime.text import MIMEText
msg = MIMEText('CPU usage is high!')
msg['Subject'] = '系统告警'
msg['From'] = 'monitor@example.com'
msg['To'] = 'admin@example.com'
with smtplib.SMTP('smtp.example.com', 587) as server:
    server.starttls()
    server.login('user', 'pass')
    server.send_message(msg)

16. pycurl

背景与用途libcurl库的Python接口,支持FTP, HTTP, HTTPS, TELNET等多种协议,功能强大。

使用说明:需要处理复杂HTTP请求、多协议支持或高性能网络操作时使用。

代码示例

代码语言:javascript
复制
import pycurl
from io import BytesIO
buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, ' http://example.com')
c.setopt(c.WRITEDATA, buffer)
c.perform()
c.close()
body = buffer.getvalue()

17. scapy

背景与用途:一个强大的交互式数据包处理程序,能够对数据包进行伪造、发送、嗅探和解析。

使用说明:用于网络探测、安全测试、协议调试等高级网络运维任务。

代码示例(发送ICMP包)

代码语言:javascript
复制
from scapy.all import IP, ICMP, sr1
packet = IP(dst="8.8.8.8")/ICMP()
reply = sr1(packet, timeout=2)
if reply:
    reply.show()

18. pandas

背景与用途:提供高性能、易用的数据结构和数据分析工具。在运维中常用于日志分析、指标统计和时间序列数据处理。

使用说明:分析CSV格式的日志、监控数据,进行聚合、筛选和可视化前的处理。

代码示例

代码语言:javascript
复制
import pandas as pd
df = pd.read_csv('access.log', sep=' ', names=['ip', 'time', 'method', 'url', 'status'])
top_ips = df['ip'].value_counts().head(10)

19. openpyxl / XlsxWriter

背景与用途:用于读写Excel文件(.xlsx格式)。 XlsxWriter 主要用于写入和生成图表,而 openpyxl 支持读写。

使用说明:生成运维报告、导出监控数据到Excel

代码示例(openpyxl读取)

代码语言:javascript
复制
from openpyxl import load_workbook
wb = load_workbook('report.xlsx')
ws = wb.active
cell_value = ws['A1'].value

20. logging

背景与用途Python标准库,为应用程序和库实现灵活的事件日志系统。

使用说明:为所有运维脚本添加标准化的日志记录,便于调试和审计。

代码示例

代码语言:javascript
复制
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
logger.info('Task started successfully.')

21. pymysql

背景与用途:一个纯PythonMySQL客户端库,用于连接和操作MySQL数据库。

使用说明:自动化备份数据库、查询数据、进行数据迁移。

代码示例

代码语言:javascript
复制
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='pass', database='test')
cursor = conn.cursor()
cursor.execute('SELECT VERSION()')
version = cursor.fetchone()
cursor.close()
conn.close()

22. sqlite3

背景与用途Python标准库,用于操作SQLite数据库。SQLite是一个轻量级的磁盘文件数据库。

使用说明:存储脚本配置、缓存数据或小型应用的数据持久化。

代码示例

代码语言:javascript
复制
import sqlite3
conn = sqlite3.connect('example.db')
conn.execute('CREATE TABLE IF NOT EXISTS logs (time TEXT, message TEXT)')
conn.commit()
conn.close()

23. rrdtool (python-rrdtool)

背景与用途:用于跟踪对象随时间的变化,并生成趋势图(Round Robin Database)。常用于监控系统绘制历史图表。

使用说明:存储和可视化时间序列监控数据,如CPU、网络流量历史。

代码示例(创建数据库)

代码语言:javascript
复制
import rrdtool
rrdtool.create('load.rrd', '--step', '300',
               'DS:cpu_load:GAUGE:600:0:U',
               'RRA:AVERAGE:0.5:1:288')

24. zipfile / tarfile

背景与用途Python标准库,用于处理ZIPTAR归档文件,支持压缩和解压。

使用说明:自动化备份文件打包、日志归档、软件包解压。

代码示例(zipfile压缩)

代码语言:javascript
复制
import zipfile
with zipfile.ZipFile('backup.zip', 'w') as zf:
    zf.write('important.log')

25. watchdog

背景与用途:一个Python库和Shell工具,用于监控文件系统事件。

使用说明:监控日志目录的新增文件、配置文件变更并触发相应动作。

代码示例

代码语言:javascript
复制
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        print(f'File modified: {event.src_path}')
observer = Observer()
observer.schedule(MyHandler(), path='.', recursive=False)
observer.start()

26. hashlib

背景与用途Python标准库,提供了常见的哈希算法(如MD5, SHA1, SHA256)。

使用说明:计算文件校验和以验证完整性,或安全存储密码。

代码示例

代码语言:javascript
复制
import hashlib
with open('file.iso', 'rb') as f:
    file_hash = hashlib.sha256(f.read()).hexdigest()

27. cryptography

背景与用途:一个提供加密配方和基元的库。

使用说明:对配置文件中的敏感信息(如密码)进行加解密。

代码示例(对称加密)

代码语言:javascript
复制
from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher_suite = Fernet(key)
encrypted_text = cipher_suite.encrypt(b"Sensitive data")

28. flask

背景与用途:一个轻量级的Web应用框架。在运维中可用于快速搭建内部管理界面、状态仪表盘或简单的API服务。

使用说明:将监控数据通过Web页面展示,或提供REST API供其他系统调用。

代码示例

代码语言:javascript
复制
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/status')
def get_status():
    return jsonify({'status': 'ok', 'cpu': psutil.cpu_percent()})
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

29. prometheus_client

背景与用途Prometheus监控系统的官方Python客户端库,用于在应用中暴露自定义指标。

使用说明:将Python应用或脚本的内部状态(如队列长度、处理次数)导出为Prometheus可抓取的指标。

代码示例

代码语言:javascript
复制
from prometheus_client import start_http_server, Gauge
import time
REQUEST_COUNT = Gauge('myapp_requests_total', 'Total requests')
start_http_server(8000)
while True:
    REQUEST_COUNT.inc()
    time.sleep(1)

30. IPy

背景与用途:一个用于处理IPv4IPv6地址和网络的Python库。

使用说明IP地址规划、子网计算、验证IP地址有效性。

代码示例

代码语言:javascript
复制
from IPy import IP
ip = IP('192.168.1.0/24')
print(f'Network: {ip.net()}')
print(f'Broadcast: {ip.broadcast()}')
print(f'Size: {ip.len()}')

从基础的 os 、 subprocess 到强大的 paramiko 、 ansible ,从监控必备的 psutil 到报告生成的 pandasopenpyxl ,它们覆盖了自动化运维的完整生命周期。在实际工作中,最佳实践是模块化设计脚本、注重错误处理和日志记录、并避免在代码中硬编码敏感信息。通过灵活组合这些工具可以构建出高效、可靠且可维护的自动化体系,从而将精力从重复劳动中解放出来,专注于更具价值的架构优化和问题解决。

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 1. psutil
  • 2. os
  • 3. subprocess
  • 4. shutil
  • 5. paramiko
  • 6. fabric
  • 7. ansible
  • 8. pexpect
  • 9. configparser
  • 10. PyYAML (yaml)
  • 11. filecmp
  • 12. difflib
  • 13. requests
  • 14. socket
  • 15. smtplib
  • 16. pycurl
  • 17. scapy
  • 18. pandas
  • 19. openpyxl / XlsxWriter
  • 20. logging
  • 21. pymysql
  • 22. sqlite3
  • 23. rrdtool (python-rrdtool)
  • 24. zipfile / tarfile
  • 25. watchdog
  • 26. hashlib
  • 27. cryptography
  • 28. flask
  • 29. prometheus_client
  • 30. IPy
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档