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