Почему невозможно получить Py_buffer из объекта массива?

В документации python по массиву четко сказано, что массив соответствует интерфейсу буфера. Он даже предлагает не использовать метод buffer_info (). Но когда я пытаюсь получить Py_Buffer из кода C / C ++ с помощью PyObject_GetBuffer () или использую python memoryview, Я получаю ошибку.

Например, в python (я использую версию 2.7):

>>> a = array.array('c')
>>> memoryview(a)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: cannot make memory view because object does not have the buffer interface

На самом деле, когда я ищу в базе кода python, только bytearrayobject (bytearray), memoryobject (memoryview) и stringobject (str) имеют установленный на них требуемый флаг Py_TPFLAGS_HAVE_NEWBUFFER. Насколько я понимаю, документация неверна; array не поддерживает интерфейс буфера.

Я мог бы использовать bytearray, который поддерживает интерфейс буфера, проблема в том, что мне нужен практический метод fromfile () массива для чтения в буфере, который я могу использовать в мой код C / C ++.

Есть ли альтернатива, которая позволила бы мне прочитать файл в буфер и использовать этот буфер из кода C и не задействовать копии памяти? (Я хочу обрабатывать большие двоичные файлы, и копирование - менее желательный вариант).

6
задан fish2000 22 April 2016 в 07:15
поделиться