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

Python系统交互库全解析

系统交互库

os 模块

os 模块提供了跨平台的文件和目录操作方法,是 Python 标准库中最常用的系统接口之一:

文件操作

  • os.rename(src, dst) - 重命名文件或目录
  • os.remove(path) - 删除文件(不能删除目录)
  • os.path 子模块提供:
    • os.path.exists(path) - 检查路径是否存在
    • os.path.isfile(path)/os.path.isdir(path) - 判断路径类型
    • os.path.getsize(path) - 获取文件大小

目录操作

  • os.mkdir(path) - 创建单个目录
  • os.makedirs(path) - 递归创建多级目录
  • os.listdir(path) - 列出目录内容
  • os.chdir(path) - 改变当前工作目录
  • os.walk(top) - 目录树生成器,递归遍历

路径处理

  • os.path.join(path1, path2) - 智能拼接路径(跨平台兼容)
  • os.path.abspath(path) - 获取绝对路径
  • os.path.dirname(path)/os.path.basename(path) - 获取目录名/文件名
  • os.path.splitext(path) - 分离文件名和扩展名

系统信息

  • os.name - 操作系统名称('posix', 'nt', 'java')
  • os.environ - 环境变量字典
  • os.getcwd() - 获取当前工作目录
  • os.cpu_count() - 获取CPU核心数

sys 模块

sys 模块实现了与 Python 解释器的深度交互:

命令行参数

  • sys.argv - 脚本参数列表(第一个元素是脚本名称)
  • 示例:python script.py arg1 arg2sys.argv = ['script.py', 'arg1', 'arg2']

模块搜索路径

  • sys.path - Python 模块搜索路径列表
  • 可动态修改:sys.path.append('/custom/path')

标准输入输出

  • sys.stdin/sys.stdout/sys.stderr - 标准 I/O 流对象
  • 重定向示例:
    sys.stdout = open('output.log', 'w')
    print("这将写入文件")
    

解释器信息

  • sys.version - Python 版本信息
  • sys.platform - 操作系统平台标识符
  • sys.executable - Python 解释器路径
  • sys.exit([status]) - 退出程序(0表示成功)

其他重要功能

  • sys.getsizeof(obj) - 获取对象占用的内存大小
  • sys.getrecursionlimit() - 获取递归深度限制
  • sys.settrace() - 设置跟踪函数用于调试

subprocess 模块

subprocess 提供了更安全的进程管理方式,替代传统的 os.system():

基本用法

# 运行简单命令
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print(result.stdout)# 检查返回码
if result.returncode != 0:print("命令执行失败")

高级控制

  • subprocess.Popen() - 创建子进程并返回句柄
    proc = subprocess.Popen(["python", "worker.py"], stdin=subprocess.PIPE,stdout=subprocess.PIPE)
    

管道连接

  • subprocess.PIPE - 创建管道
    p1 = subprocess.Popen(["cat", "file.txt"], stdout=subprocess.PIPE)
    p2 = subprocess.Popen(["grep", "keyword"], stdin=p1.stdout, stdout=subprocess.PIPE)
    

错误处理

  • subprocess.CalledProcessError - 命令返回非零状态时抛出
  • 安全执行:
    try:subprocess.run(["rm", "important_file"], check=True)
    except subprocess.CalledProcessError as e:print(f"命令失败: {e}")
    

其他功能

  • timeout 参数 - 设置命令超时时间
  • shell=True - 通过系统shell执行命令(有安全风险)
  • env 参数 - 设置子进程环境变量

远程管理工具

paramiko 库

paramiko 是纯 Python 实现的 SSHv2 协议库:

SSH 连接

import paramikoclient = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('hostname', username='user', password='pass')

执行命令

stdin, stdout, stderr = client.exec_command('ls -l')
print(stdout.read().decode())

文件传输

sftp = client.open_sftp()
sftp.put('local.txt', 'remote.txt')  # 上传
sftp.get('remote.txt', 'local.txt')  # 下载
sftp.close()

密钥认证

key = paramiko.RSAKey.from_private_key_file('/path/to/key.pem')
client.connect('host', username='user', pkey=key)

高级功能

  • SSH 隧道
  • 保持连接
  • 主机密钥验证
  • 交互式 shell

Fabric 工具

Fabric2 是新一代的批量任务框架,构建在 Paramiko 之上:

任务定义

from fabric import task@task
def deploy(c):c.run('git pull')c.run('pip install -r requirements.txt')

主机管理

@task
def check_disk(c):# 单个连接result = c.run('df -h', hide=True)print(f"磁盘使用:\n{result.stdout}")# 多主机for connection in c:with connection.cd('/var/log'):connection.run('ls -l')

批量执行

from fabric import Connection, ThreadingGrouphosts = ['web1', 'web2', 'db1']
group = ThreadingGroup(*hosts, user='admin')result = group.run('hostname')
for connection, result in result.items():print(f"{connection.host}: {result.stdout.strip()}")

配置系统

  • fabric.yml 配置文件:
    user: deploy
    connect_kwargs:key_filename: /path/to/key.pem
    hosts:- web1.example.com- web2.example.com
    

  • 或通过 Python 配置:
    c = Connection('host', user='user', connect_kwargs={'password': 'pass'})
    

其他特性

  • 并行执行
  • 失败处理
  • 上下文管理器
  • 本地和远程操作混合

网络通信库

socket 模块

socket 提供底层网络接口:

TCP 通信

# 服务器端
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', 8000))
server_socket.listen(1)
conn, addr = server_socket.accept()# 客户端
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 8000))

UDP 通信

# 服务器端
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(('0.0.0.0', 8000))
data, addr = udp_socket.recvfrom(1024)# 客户端
udp_socket.sendto(b'Hello', ('localhost', 8000))

常用方法

  • socket.settimeout() - 设置超时时间
  • socket.getaddrinfo() - 地址解析
  • socket.gethostname() - 获取主机名
  • socket.shutdown() - 优雅关闭连接

高级功能

  • 非阻塞 I/O
  • 套接字选项设置
  • 多路复用 (select/poll)
  • SSL 包装

requests 库

requests 提供了人性化的 HTTP 客户端:

简单请求

# GET 请求
response = requests.get('https://api.example.com/data')
print(response.json())# POST 请求
payload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://api.example.com/post', data=payload)

参数传递

  • params - URL 查询参数
    requests.get('https://api.example.com/search', params={'q': 'python'})
    

  • json - JSON 请求体
    requests.post('https://api.example.com/data', json={'key': 'value'})
    

会话保持

session = requests.Session()
session.get('https://example.com/login', auth=('user', 'pass'))
response = session.get('https://example.com/dashboard')

高级功能

  • 代理支持:
    proxies = {'http': 'http://proxy.example.com:8080'}
    requests.get('http://example.com', proxies=proxies)
    

  • 超时设置:
    requests.get('http://example.com', timeout=5)
    

  • SSL 验证:
    requests.get('https://example.com', verify='/path/to/cert.pem')
    

响应处理

  • response.status_code - HTTP 状态码
  • response.headers - 响应头
  • response.content - 二进制响应体
  • response.text - 文本响应体
  • response.json() - JSON 解析

数据处理工具

json 模块

json 模块用于 API 数据交互:

序列化

data = {'name': 'Alice', 'age': 30, 'skills': ['Python', 'SQL']}
json_str = json.dumps(data, indent=2)  # 美化输出

反序列化

data = json.loads('{"name": "Alice", "age": 30}')

文件操作

# 写入文件
with open('data.json', 'w') as f:json.dump(data, f)# 读取文件
with open('data.json') as f:data = json.load(f)

高级功能

  • 自定义编码器:
    class CustomEncoder(json.JSONEncoder):def default(self, obj):if isinstance(obj, datetime):return obj.isoformat()return super().default(obj)json.dumps(obj, cls=CustomEncoder)
    

  • 解析参数:
    json.loads(json_str, object_hook=my_decoder)
    

csv 模块

csv 模块用于报表生成:

读取 CSV

with open('data.csv') as f:reader = csv.reader(f)for row in reader:print(row)

写入 CSV

with open('output.csv', 'w', newline='') as f:writer = csv.writer(f)writer.writerow(['Name', 'Age'])writer.writerow(['Alice', 30])

字典格式

# 读取
with open('data.csv') as f:reader = csv.DictReader(f)for row in reader:print(row['Name'], row['Age'])# 写入
with open('output.csv', 'w') as f:fieldnames = ['Name', 'Age']writer = csv.DictWriter(f, fieldnames=fieldnames)writer.writeheader()writer.writerow({'Name': 'Alice', 'Age': 30})

方言支持

csv.register_dialect('mydialect', delimiter='|', quoting=csv.QUOTE_MINIMAL)
with open('data.psv') as f:reader = csv.reader(f, dialect='mydialect')

yaml 模块

yaml 用于配置文件解析:

基本用法

import yaml# 解析 YAML
with open('config.yaml') as f:config = yaml.safe_load(f)# 生成 YAML
data = {'server': {'host': '127.0.0.1', 'port': 8000}}
yaml_str = yaml.dump(data, default_flow_style=False)

高级特性

  • 锚点和别名:
    defaults: &defaultsadapter: postgreshost: localhostdevelopment:<<: *defaultsdatabase: dev
    

  • 自定义标签
  • 多文档流

安全考虑

  • 始终优先使用 yaml.safe_load() 而非 yaml.load()
  • 避免加载不受信任的 YAML 文件
  • 复杂对象需要自定义表示器/构造器

与其他格式对比

  • 比 JSON 更易读
  • 支持注释
  • 比 XML 更简洁
  • 适合配置文件和复杂数据结构
http://www.lryc.cn/news/602084.html

相关文章:

  • CentOS 7 安装 dnsmasq 解决nginx无法指定dns的问题
  • 新能源行业B端极简设计:碳中和目标下的交互轻量化实践
  • GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【三】
  • Windows 系统分辨率切换** 与 **Qt4 无边框窗口管理机制** 的交互
  • 全面解析MySQL(4)——三大范式与联合查询实例教程
  • Deep Learning_ Foundations and Concepts-Springer (2024)【拜读】前向编码器20章
  • 【CSS】设置表格表头固定
  • 深度学习----视觉里程计
  • 工业场景工服识别准确率↑32%!陌讯多特征融合算法实战解析
  • STM32 usb HOST audio USB 音频设备 放音乐
  • Pandas 里的分箱操作
  • 负载均衡集群HAproxy
  • MCP工作原理
  • Java-泛型类的定义与使用
  • 浅谈面试中的递归算法
  • 【Linux】编辑器vim和编译器gcc/g++
  • 解析分区、挂载与块设备:Linux 存储管理核心命令详解
  • 近屿智能正式发布AI得贤招聘官的AI面试官智能体6.3版本:交付替代人类面试官的打分结果
  • 零基础学习性能测试第九章:全链路追踪-项目实操
  • Jenkins + SonarQube 从原理到实战一:基于 K8s 部署与使用(含中文插件与 Python 扫描)
  • 力扣1457. 二叉树中的伪回文路径
  • 力扣面试150(42/150)
  • 旧物回收小程序:科技赋能,让旧物回收焕发生机
  • 软件测试之功能测试
  • 6种将iPhone照片传输到Windows 10电脑的方法
  • 跨境协作系统文化适配:多语言环境下的业务符号隐喻与交互习惯
  • 快速了解MySQL
  • Ubuntu lamp
  • 分布式IO选型指南:2025年分布式无线远程IO品牌及采集控制方案详解
  • 四、计算机组成原理——第3章:存储系统