Hi
ich habe folgendes kleines Problem :
Ein Programm befüllt ein shared Memory mit Daten die in Form eines c struc gespeichert werden.
Diese Daten hätte ich gerne in Python. Ich bekomme die daten eingelesen mit
with open(datenpfad,"r+b")as f:
map = mmap.mmap(f.fileno(),0)
Gibt es eine Möglichkeit dann sinnvoll auf die Daten zu zugraifen ?
ich meine ohne Byte gefrickel ?
Ich habe schon mittel ctypes das C struc nachgebaut nur leider weiss ich nicht wie ich das casten kann. Geht das überhaupt ?
Oder ist es besser wenn ich mir eine .so datei baue und dann nur c Funktionen aufrufen muss ?
Habt bitte etwas nachsicht mit mir ich beschäftige mich erst seit dieser Woche mit Python.
Ach ja bevor ich es vergesse ich arbeite unter Linux mit Python 3.1.
Danke für die Hilfe schon mal im foraus.
von python auf shared Memory zugreifen
@ignis-draco: So ein `mmap`-Objekt implementiert das `buffer`-Protokoll, dass heisst man kann die `from_buffer()`-Methode von `ctypes`' Typ-Objekten verwenden:
Code: Alles auswählen
In [44]: class Point(ctypes.Structure):
....: _fields_ = [
....: ('x', ctypes.c_int16),
....: ('y', ctypes.c_int16)
....: ]
....:
In [45]: a
Out[45]: <mmap.mmap object at 0x9220940>
In [46]: a[0:4]
Out[46]: '\x00\x00\x00\x00'
In [47]: p = Point.from_buffer(a)
In [48]: p.x
Out[48]: 0
In [49]: p.y
Out[49]: 0
In [50]: p.x = -1
In [51]: p.y = 42
In [52]: a[0:4]
Out[52]: '\xff\xff*\x00'
-
- User
- Beiträge: 15
- Registriert: Freitag 25. Februar 2011, 12:33
Vielen dank werde das Morgen gleich mal ausprobieren.
Genau da nach habe ich gesucht.
Genau da nach habe ich gesucht.