【问题标题】:Expose C++ buffer as Python 3 bytes将 C++ 缓冲区公开为 Python 3 个字节
【发布时间】:2014-05-28 16:01:24
【问题描述】:
使用 Boost::Python,有没有办法让 Python 3.2 可以将原始 C++ 缓冲区作为 bytes 对象访问?
very similar question 有一个 Python 2 的答案,但那里描述的 PyBuffer_FromReadWriteMemory 函数在 Python 3 中不再存在。
编辑:感谢 user2167433 的回答,我真正想要的是只读的 memoryview 对象,而不是 bytes 对象(我相信使用 memoryview 可以避免复制缓冲区)。
【问题讨论】:
标签:
c++
python-3.x
boost-python
python-3.2
【解决方案1】:
Python > 3 和 Python
Py_buffer buffer;
int res = PyBuffer_FillInfo(&buffer, 0, data, dataSize, true, PyBUF_CONTIG_RO);
if (res == -1) {
PyErr_Print();
exit(EXIT_FAILURE);
}
boost::python::object memoryView(boost::python::handle<>(PyMemoryView_FromBuffer(&buffer)))
Python >= 3.3:
我知道的最好方法是使用 PyMemoryView_FromMemory:
boost::python::object memoryView(boost::python::handle<>(PyMemoryView_FromMemory(data, dataSize, PyBUF_READ)));
memoryview 是访问支持缓冲区接口的对象的 Python 方式。
C API memoryview
memoryview class