In einem anderen Thread hab ich vorhin schon beschrieben, dass ich es derzeit nicht hinbekomme, rrdtool unter Python3 lauffähig zu bekommen. Nur unter Python2. Ich hoffe, da findet sich aber noch ein Weg.
Falls sich das aber doch schwieriger gestaltet, muss ich wohl oder übel auf Python 2 zurückgreifen. Plan B, sozusagen =(
Da wiederrum krieg ich es aber nicht wirklich gebacken, die entsprechende Methode aus dem Hut zu zaubern, die dasselbe macht, wie der Beispielcode unten.
Im Grunde gehts nur darum, aus einem 32-Byte-Paket 8 Stück signed integer rauszufiltern.
Unter Python3 ist mir das relativ schnell gelungen, sieht in einem Beispiel so aus:
#!/usr/bin/python3
#[5,0,0,0,15,0,0,0,205,0,0,0,189,11,0,0,69,156,0,0,37,161,7,0,133,141,91,0,133,29,44,4]
#[PL01---|PL02----|PL03-----|PL04------|PL05------|PL06------|PL07--------|PL08-------|
#|5 |15 |205 |3005 |40005 |500005 |6000005 |70000005 |
#|0..3 |4..7 |8..11 |12..15 |16..19 |20..23 |24..27 |28..31 |
zulu = [5,0,0,0,15,0,0,0,205,0,0,0,189,11,0,0,69,156,0,0,37,161,7,0,133,141,91,0,133,29,44,4]
#Einzelne Payload-Pakete
PL01 = int.from_bytes(zulu[0:4], byteorder="little", signed=True)
PL02 = int.from_bytes(zulu[4:8], byteorder="little", signed=True)
PL03 = int.from_bytes(zulu[8:12], byteorder="little", signed=True)
PL04 = int.from_bytes(zulu[12:16], byteorder="little", signed=True)
PL05 = int.from_bytes(zulu[16:20], byteorder="little", signed=True)
PL06 = int.from_bytes(zulu[20:24], byteorder="little", signed=True)
PL07 = int.from_bytes(zulu[24:28], byteorder="little", signed=True)
PL08 = int.from_bytes(zulu[28:32], byteorder="little", signed=True)
print("PL01 =", PL01)
print("PL02 =", PL02)
print("PL03 =", PL03)
print("PL04 =", PL04)
print("PL05 =", PL05)
print("PL06 =", PL06)
print("PL07 =", PL07)
print("PL08 =", PL08)
Alles anzeigen
Zeile 2 bis 5 diente mir nur der Übersicht halber und zum Rumprobieren, was nach kurzer Zeit erfolgreich war.
Die Ausgabe sieht wunschgemäß aus:
ZitatAlles anzeigenPL01 = 5
PL02 = 15
PL03 = 205
PL04 = 3005
PL05 = 40005
PL06 = 500005
PL07 = 6000005
PL08 = 70000005
Alles, was ich bisher so an Code in Python2 dazu finden konnte, sieht aus meiner Sicht vergleichsweise kompliziert und ungelenk aus. Deswegen die Frage: wie würde man zum Beispiel
am elegantesten in Python2 formulieren?