You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python os.sendfile触发OSError: [Errno 38] 问题排查

关于os.sendfile在macOS上报错的问题解析

macOS系统下的os.sendfile()实现遵循BSD规范,和Linux版本存在差异:它要求第一个参数(目标文件描述符)必须是套接字(socket),而你传入的是普通文件的描述符,这就是触发OSError: [Errno 38] Socket operation on non-socket错误的原因。

你参考的内容大概率基于Linux环境——Linux的sendfile支持普通文件之间的内容传输,但macOS的实现仅允许将数据从普通文件发送到套接字,无法直接在两个普通文件间使用该方法。

如果你的需求是复制文件内容,推荐以下两种更可靠的替代方案:

方案1:手动读写实现指定字节复制

import os

f1 = os.open('f1.txt', os.O_RDONLY)
f2 = os.open('f2.txt', os.O_RDWR | os.O_CREAT)

# 读取指定100字节并写入目标文件
data = os.read(f1, 100)
os.write(f2, data)

os.close(f1)
os.close(f2)

方案2:使用shutil模块(更简洁)

如果不需要精确控制传输字节数,shutil模块的方法更适合文件复制场景:

import shutil

shutil.copyfile('f1.txt', 'f2.txt')

内容的提问来源于stack exchange,提问作者Igor Belykh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:10:24