Python Glossary Русский

Python 3.10+Linuxosfunction

os.splice

os — efficient copying

Move data between descriptors via a pipe without user-space copies (3.10+). Availability: Linux.

Syntax

os.splice(...)

One of the descriptors must be a pipe: data moves through the pipe buffer without copying into process memory. A typical route is socket → pipe → file. It is a niche tool for Linux servers; everyday code is fine with shutil.copyfileobj or sendfile.

Examples

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)

See also

Common errors

Open in the full glossarydocs.python.orgReport an inaccuracy