struct modul

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BigSkylie
User
Beiträge: 3
Registriert: Montag 25. Juni 2012, 16:05

Hallo,

ein in früheren Tagen geschriebenes Python-Programm verwendet das struct modul. Das Programm produziert richtige Binärdaten unter
  • - Windows XP 32bit mit Pythonxy 2.6.5.3 (Python 2.6)
    - Windows 7 64bit mit Pythonxy 2.6.5.6 (Python 2.6)
Das Programm schreibt falsche Binärdaten unter
  • - Windows 7 64bit mit Pythonxy 2.7.2.3 (Python 2.7)
Ich halte dabei folgende Zeilen für relevant:

Code: Alles auswählen

fil.write(struct.pack('<H', var))
fil.write(struct.pack('<I', var))
data = numpy.array(struct.unpack('<' + str(len) + 'B', bytes[4:4+len]), dtype=numpy.int8)
data = numpy.array(struct.unpack('<' + str(len/2) + 'h', bytes[4:4+len]), dtype=numpy.short) 
In der Dokumentation von Struct fällt mir auf, dass alle format characters jeweils mit der Note "(3)" gekennzeichnet sind. Daraus konnte ich allerdings nur ablesen, dass das Problem meine Python-Fähigkeiten wohl übersteigt.

Es scheint an der neuen Python-Version zu liegen. Aber genauer verstehe ich das nicht. Das Programm ist immens wichtig für mich und ihr würdet mir sehr helfen.

Vielen Dank fürs Durchlesen. Bitte fragt nach, wenn irgend etwas unklar ist.

Gruß, BigSkylie
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Haben die betreffenden Objekte denn tatsächlich `__index__()` implementiert? Ansonsten wüsste ich nicht, wie du auf die Idee kommst, dass es daran liegen soll. Wenn ja, dann vielleicht mal "auf doof" ein `obj.__index__ = obj.__int__` probieren, wobei `obj` natürlich das jeweilige Objekt ist. Oder versuchsweise mal mittels `del obj.__int__` die Methode ganz rauslöschen. Ist alles aber natürlich mit Vorsicht zu genießen und auch eher zwecks Debugging gemeint... ;)
BigSkylie
User
Beiträge: 3
Registriert: Montag 25. Juni 2012, 16:05

Ok dann ist es die __index__() - Methode wohl nicht, die ist nirgendwo im Code verwendet. Aber irgendwas muss Python 2.7 (oder pythonxy 2.7.2.3) noch verändern.
BlackJack

@BigSkylie: In wie fern sind die Daten denn falsch? Wo unterscheiden sie sich genau?

Die beiden letzten Zeilen sehen mir übrigens komisch aus. Die Länge *einer* Zeichenkette bestimmt die Anzahl der Werte in einer *anderen* Zeichenkette?
BigSkylie
User
Beiträge: 3
Registriert: Montag 25. Juni 2012, 16:05

Also die komplette Geschichte:
Ein Programm schreibt Daten für ein Messgerät (Windows 2000 32bit) in ein Binary file. Nach dem Umstieg auf Windows 7 64bit (wie auch vorher PythonXY 2.6.5.3) funktionierte alles wie gehabt. Der Umstieg auf Pythonxy 2.7.2.3 brachte dann die Probleme mit sich.
@BigSkylie: In wie fern sind die Daten denn falsch? Wo unterscheiden sie sich genau?
Das Programm fing an, das Binary-File falsch zu schreiben. Das Messgerät zeigte ein Array aus Nullen und Einsen nur noch als Nullen an.
Die beiden letzten Zeilen sehen mir übrigens komisch aus. Die Länge *einer* Zeichenkette bestimmt die Anzahl der Werte in einer *anderen* Zeichenkette?
Da bei uns das Programm niemand mehr im Detail versteht kann ich dazu leider nichts sagen. Ich weiß nur, dass es mit Pythonxy 2.6.5.3 tadellos funktioniert hatte. Die Zeile sollte also generell in Ordnung sein.
deets

Dann waere doch mal angezeigt, das binaer-file anzuschauen und zu sehen, was da genau unterschiedlich ist.
Antworten