Spalten aus CSV Datei in Variable weiter verwenden

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
T-One
User
Beiträge: 1
Registriert: Dienstag 16. März 2010, 16:57

Hallo,

bin neu hier und ein ziemlicher Python Noob, gebe aber mein bestes die Sache zu verstehen. Ich hab jedoch noch einen ganzen haufen Defizite bei denen ich auf eure Hilfe hoffe :)

Zur Sache:
Ich lese aus einer CSV eine Spalte mit IP-Adressen aus, was soweit auch ganz gut geht, und überprüfe dann die IPs via Ping ob die Hosts online sind. Soweit bekomme ich auch die Ausgabe der Hosts hin. Jetzt möchte ich jedoch die verschiedenen Hosts anhand ihres Status zur weiteren Bearbeitung in einer Liste oder einem Dict speichern und da hört es sich bei mir schon auf :)

Ich weiß nicht wie ich anhand der antworten "No Response" bzw. "Alive" die Zeilen zuordnen kann. Anbei der bisheriege Code samt der CVS.

Code: Alles auswählen

#!/usr/bin/python


import csv
import os
import re
import sys
import time

#
data = """\
version,Platform,VC,DC,Enclosure,Bay,hostname,vmkip,vmoip,clusterfile,folder,SCIP,SCGW
ESXi,BL 460 G1,virtualcenter1,cs2,ENC1,Bay2,esxserver1,192.168.101.201,172.16.1.10,cluster1.ps1,FileServers,not applicable,not applicable
ESXi,BL 460 G1,virtualcenter1,cs2,ENC1,Bay2,esxserver2,192.168.101.202,172.16.1.10,cluster1.ps1,FileServers,not applicable,not applicable
ESXi,BL 460 G1,virtualcenter1,cs2,ENC1,Bay2,esxserver3,192.168.101.203,172.16.1.10,cluster1.ps1,FileServers,not applicable,not applicable
ESXi,BL 460 G1,virtualcenter1,cs2,ENC1,Bay2,esxserver4,192.168.101.204,172.16.1.10,cluster1.ps1,FileServers,not applicable,not applicable
ESXi,BL 460 G1,virtualcenter1,cs2,ENC1,Bay2,esxserver5,192.168.101.205,172.16.1.10,cluster1.ps1,FileServers,not applicable,not applicable
ESXi,BL 460 G1,virtualcenter1,cs2,ENC1,Bay2,esxserver6,192.168.101.206,172.16.1.10,cluster1.ps1,FileServers,not applicable,not applicable
ESXi,BL 460 G1,virtualcenter1,cs2,ENC1,Bay2,esxserver7,172.22.1.11,172.16.1.10,cluster1.ps1,FileServers,not applicable,not applicable
"""

fout = open("some.csv", "w")
fout.write(data)
fout.close()

lifeline = re.compile(r"(\d) received")
report = ("No response","Partial Response","Alive")

filename = "some.csv"
dict_reader = csv.DictReader(open(filename, "rb"))
for row in dict_reader:
    ip = row["vmkip"]
    ping = os.popen("ping -q -c2 "+ip,"r")
    print "Testing ",ip,
    while 1:
        line = ping.readline()
        if not line: break
        igot = re.findall(lifeline,line)
        if igot:
            print report[int(igot[0])]
Wäre toll wenn mir hier jemand auf die Sprünge helfen könnte.

Thx.

T-One
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Verwende das [mod]subprocess[/mod] Modul. os.popen ist deprecated.
In der Dokumentation ist ganz unten ein Abschnitt, wie die os.popen Funktionen durch das Modul ersetzt werden können.

Wenn du damit nicht weiterkommst, dann poste doch bitte mal, was du von dem Prozess in den stdout geschrieben bekommst (soweit müsstest du mit der Dokumentation auf jeden Fall kommen).
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Antworten