Seite 1 von 1

Re: merkwürdigen String in Mac umwandeln

Verfasst: Mittwoch 17. November 2010, 20:44
von 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.

Re: merkwürdigen String in Mac umwandeln

Verfasst: Mittwoch 17. November 2010, 20:48
von Leonidas
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.

Re: merkwürdigen String in Mac umwandeln

Verfasst: Mittwoch 17. November 2010, 21:27
von herates
"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.

Re: merkwürdigen String in Mac umwandeln

Verfasst: Mittwoch 17. November 2010, 21:42
von EyDu
Die dir-Funktion wird auch in jedem Tutorial behandelt.

Re: merkwürdigen String in Mac umwandeln

Verfasst: Mittwoch 17. November 2010, 21:44
von 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.