Versuche mal mit  del list[-2]

Am 15. Februar 2011 08:56 schrieb Denny Schierz <[email protected]>:
> hi,
>
> da aus Perl nichts geworden ist, versuche ich es mal mit Python und habe
> gleich die erste Aufgabe gefunden:
>
> Ich will mir (unter anderem für Nagios) einen Wrapper schreiben, mit dem
> ich bestimmte Zustände von ESX VMs abfragen od. auch initiieren kann.
> »Also Ist VM X eingeschaltet, wenn nicht, schalte sie ein etc.« Dafür
> rufe ich im Prinzip immer nur vmware-cmd <paramter> auf.
>
> Die Ausgabe von z.B. vmware-cmd -s listvms (Listet alle registrierten
> VMs auf) lasse ich in eine Liste schreiben. Nun hatte ich das Problem,
> dass am Ende der Liste immer noch zwei Einträge mit Leerzeilen vorhanden
> waren (.split('\n')). Diese wollte ich löschen, habe es nicht so richtig
> hinbekommen, im Sinne von: lösche mit del list[:2] die letzten beiden
> Einträge. Allerdings wirkt das genau verkehrt rum ... es werden nur noch
> die Einträge 0 und 1 angezeigt. Also habe ich vorher ein list.reverse()
> angeworfen und siehe da, mein del list[:2] löscht die überflüssigen
> Einträge raus. Doch mich würde interessieren, wie ich die Leerzeilen
> bereits beim befüllen der Liste vermeiden kann. Da mir das schon wieder
> wie ein Hack vorkommt:
>
> ============
>
> ./test2.py
>
> [..]
> ('VM :', 18, '/vmfs/volumes/4c52874b-05f0/vm5/vm5.vmx')
> ('VM :', 19, '/vmfs/volumes/4c52874b-05f0/cluster_1/cluster_1.vmx')
> ('VM :', 20, '/vmfs/volumes/4c52874b-05f0/cluster_2/cl_2.vmx')
> ('VM :', 21, '')
> ('VM :', 22, '')
>
> da man nicht weiß, wie lang die Liste wird, kann man diese nicht
> explizit mit del 21,22 angehen.
>
> Die beiden Newlines kommen schon vom vmware-cmd Kommando:
>
> # vmware-vmd -s listvms | od -taz
>
> [...]
> 0002620   a   d   /   c   l   u   s   t   e   r   _   2   /   c   l   u
>>ad/cluster_2/clu<
> 0002640   s   t   e   r   _   2   .   v   m   x  nl  nl
>>ster_2.vmx..<
> 0002654
>
> Meine ersten Anfänge sehen so aus (2 Bücher + Google)
>
> =========================
> #!/usr/bin/python2.5
> #imports
> from optparse import OptionParser
> from subprocess import Popen, PIPE, STDOUT
>
> # Definitionen
>
> def list_vm(choice):
>        list = Popen(['vmware-cmd','-s', 'listvms'], stdout=PIPE,
> stdin=PIPE, stderr=STDOUT).communicate()[0].split('\n')
>        #list.reverse()
>        #del list[:2]
>        if choice == 0:
>                for index in range(len(list)):
>                        print("VM :",index, list[index])
>        else:
>                print("VM:", list[choice])
>
> choice = 0
> list_vm(0)
> ==========================
>
> Wie bekomme ich die überflüssigen \nl da nun raus?
>
> cu denny
>
> --
> ----------------------------------------------------------------------------
> PUG - Penguin User Group Wiesbaden - http://www.pug.org
>
>
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an