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

Attachment: signature.asc
Description: This is a digitally signed message part

--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an