Вы должны использовать там ctypes. Начиная с Python 2.5 ctypes, где уже есть стандартная библиотека, ситуация для вас "win".
С помощью ctypes вы можете создать объект python, представляющий пуанты более высокого уровня, выполнив это:
import ctypes
integer_pointer_type = ctypes.POINTER(ctypes.c_int)
my_pointer = integer_pointer_type.from_address(your_address)
Затем вы можете адресовать содержимое памяти как индексированный объект Python, например
распечатать my_pointer [0]
Это не даст вам "интерфейс типа файла" - хотя было бы тривиально обернуть класс такими методами "read" и "seek" вокруг такого объекта:
class MyMemoryFile(object):
def __init__(self, pointer, size=None):
integer_pointer_type = ctypes.POINTER(ctypes.c_uchar)
self.pointer = integer_pointer_type.from_address(your_address)
self.cursor = 0
self.size = size
def seek(self, position, whence=0):
if whence == 0:
self.cursor = position
raise NotImplementedError
def read(size=None):
if size is None:
res = str(self.pointer[cursor:self.size])
self.cursor = self.size
else:
res = str(self.pointer[self.cursor:self.cursor + size]
self.cursor += size
return res
(не проверено - напишите мне, если не работает - можно исправить)
Обратите внимание, что попытки чтения памяти за пределы пространства, выделенного для вашей структуры данных, будут иметь те же самые эффекты, что и в C: в большинстве случаев ошибка сегментации.