Python Glossary English

Python 3.10+Linuxosфункция

os.splice

os — эффективное копирование

Перемещает данные между дескрипторами через канал (pipe) без копирования в пространство пользователя (Python 3.10+). Доступно на Linux.

Синтаксис

os.splice(...)

Один из дескрипторов обязан быть каналом: данные перемещаются через буфер канала без копирования в память процесса. Типичный путь — сокет → канал → файл. Это узкоспециальный инструмент для серверов на Linux; в обычном коде достаточно shutil.copyfileobj или sendfile.

Примеры

import os
r, w = os.pipe()
with open('example.bin', 'wb') as f:
    f.write(b'hello splice')
fd = os.open('example.bin', os.O_RDONLY)
n = os.splice(fd, w, 4096)
print(n)   # → ? только Linux: сколько байт ядро перенесло в канал, не больше 4096
print(os.read(r, n))   # → ? только Linux: те же самые байты — при переносе они не копировались в память процесса
print(os.splice(fd, w, 65536, offset_src=0))   # → ? только Linux: перенос с начала файла, позиция fd при этом не сдвигается
dst = os.open('copy.bin', os.O_WRONLY | os.O_CREAT)
print(os.splice(fd, dst, 4096))   # → ? только Linux: OSError [Errno 22] Invalid argument — хотя бы один из дескрипторов обязан быть каналом (pipe)

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности