merkwürdigen String in Mac umwandeln

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
BlackJack

@herates: Mal davon abgesehen, dass ich Dir für die Murkslösung auch schon einen Hinweis gegeben habe, könntest Du auch einfach mal ein bisschen herumprobieren. Was solche `OctetString`-Objekte für Methoden haben -- da wird in dem Beispielschnippsel ja auch schon was interessantes gezeigt -- oder wie die auf die grundlegenden Umwandlungsfunktionen reagieren. Wenn man eine Zeichenkette haben möchte, bietet sich ja zum Beispiel `str()` an. Und siehe da:

Code: Alles auswählen

In [79]: a
Out[79]: OctetString('\x00\re[v\x1d')

In [80]: str(a)
Out[80]: '\x00\re[v\x1d'
Vielleicht geht ja auch Indexzugriff, dann sind die Dinger auch "iterable":

Code: Alles auswählen

In [81]: a[0]
Out[81]: '\x00'

In [82]: map(ord, a)
Out[82]: [0, 13, 101, 91, 118, 29]
Juhuu.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

herates hat geschrieben:ich bin nicht der spezi in python (wie auch nach 2 wochen). also pysnmp verwendet.. was bekomm ich? eine liste von listenobjekten mit der länge 1.
was soll ich den jetzt damit großartig anfangen?
Also reine Logik würde mir raten, mal das erste Objekt aus dieser Liste rauszuholen und anzuschauen. Vielleicht hat es ja interessante Attribute?

Aber eigentlich hab ich jetzt auch nicht viel Lust da weiter zu schreiben, weil ich mich auch Moderator schimpfe und diese bei dir offenbar unbeliebt sind.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
herates
User
Beiträge: 8
Registriert: Mittwoch 17. November 2010, 16:54

"Thomas, dass ist Deutsch und kein Französisch, also benutz doch die Deutsch-Grammatik und nicht solch komische Konstrukte :roll: "
Du bist der Schüler. Hast du noch Lust weiter zu lernen? Fühlst du dich nicht vor der ganzen Klasse angegriffen?
Lies bitte erst einmal das Tutorial, und lerne, mit Listen und Objekten umzugehen.
Genau das hätte er schreiben können.
weil ich mich auch Moderator schimpfe und diese bei dir offenbar unbeliebt sind.
wie ich verallgemeinerungen hasse

Um wieder sachlich zu werden:

Code: Alles auswählen

Python 2.4.3 (#1, Sep  8 2010, 11:38:44)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pysnmp.entity.rfc3413.oneliner import cmdgen
>>> oid = (1, 3, 6, 1, 4, 1, 9, 9, 513, 1, 1, 1, 1, 2)
>>> ip="123.123.123.123"
>>> port=161
>>> community="dfsrtfwe"
>>> udpConnection =  cmdgen.UdpTransportTarget((ip, port))
>>> snmpConnection = cmdgen.CommunityData('test-agent', community)
>>> varBindTable = cmdgen.CommandGenerator().nextCmd(snmpConnection, udpConnection, oid)
>>> type(varBindTable)
<type 'tuple'>
>>>>>> len(varBindTable)
4
# okay hier habe ich mich geirrt. varBindTable ist also ein Tupel. Die ersten 3 Elemente sind StatusCodes von der Abfrage. Das vierte:
>>> print varBindTable[3]
[[(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.15.247.72.161.96'), OctetString('\x00\re[v\x1d'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.15.247.72.163.16'), OctetString('\x00\re[v\x85'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.15.247.122.99.192'), OctetString('\x00\x0f\x90>:S'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.17.92.104.31.240'), OctetString('\x00\re[v\x1a'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.20.27.88.117.176'), OctetString('\x00\x14\x1c\xed/\xbc'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.23.223.167.243.144'), OctetString('\x00\x1b\xd5\x130\xb6'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.23.223.168.26.80'), OctetString('\x00\x1b\xd5\x13>\x18'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.25.169.253.113.240'), OctetString('\x00\x1a/\x83Tt'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.25.169.253.132.64'), OctetString('\x00\x1a/\x83V\xba'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.27.212.134.7.96'), OctetString('\x00\x0c\x85\xa8\x89\x88'))], [(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.28.88.175.138.112'), OctetString('\x00\x0c\x85\xf5\xb6\xe0'))]]
>>> tmp = varBindTable[3]
>>> type(tmp)
<type 'list'>
>>> len(tmp)
11
>>> tmp = tmp[1]   # um mir mal eins rauszugreifen
>>> type(tmp)
<type 'list'>
>>> len(tmp)
1
>>> tmp = tmp[0]
>>> type(tmp)
<type 'tuple'>     # okay ich gebe zu auch hier meine hausaufgaben nicht gemacht zu haben
>>> print tmp
(ObjectName('1.3.6.1.4.1.9.9.513.1.1.1.1.2.0.15.247.72.163.16'), OctetString('\x00\re[v\x85'))
>>> len(tmp)
2
>>> tmp = tmp[1]
>>> type(tmp)
<type 'instance'>
>>> print tmp
e[v
jetzt hänge ich und finde dazu auch nichts.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Die dir-Funktion wird auch in jedem Tutorial behandelt.
Das Leben ist wie ein Tennisball.
BlackJack

@herates: ``print`` fragt Objekte nach ihrer repräsentation als Zeichenkette, also das was `str()` auch macht. Und genau da wolltest Du doch heran kommen. Es macht natürlich nicht viel Sinn das als Zeichenkette so auszugeben, denn es handelt sich ja um sechs Bytes die als Text gesehen keinen Sinn ergeben. Wie man daraus sechs Zahlen mit den Bytewerten macht, habe ich ja schon gezeigt.
Antworten