Verfasst: Donnerstag 29. Januar 2009, 10:20
Hier ist nun mein ganzes Skriptchen ...
Funktioniert tadelos. Leider etwas langsam.
Hat jemand mal einen Tip, wie man das in der Auswertung optimieren kann?
Funktioniert tadelos. Leider etwas langsam.
Hat jemand mal einen Tip, wie man das in der Auswertung optimieren kann?
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# FUNKTIONSDEFINITIONEN
import sys, string
import subprocess
from subprocess import PIPE, Popen
import os
def logfile_oeffnen_und_auswerten():
import string
# FILE oeffen und in eine SEQUENZ / ARRAY schreiben
logfile = file("/var/log/auswertung/logfile.txt", "r")
logfileinhalt = [line.rstrip('\n') for line in logfile.readlines()] # einlesen des Fileinhaltes
inhalt_logfile = [] # Leere Sequenz / Array erstellen um dann das LOG-File hierrein zu speichern
for zeile in logfileinhalt:
inhalt_logfile.append(zeile)
logfile.close() # Datei schliessen
# Testen ob STRING Buchstaben oder Zahlen enthält
i=0
getestetes_inhalt_logfile = []
for i in inhalt_logfile:
ergebnis=i.isdigit()
if ergebnis == True:
ergebnis = yppasswdauswertung(i,"uid_username")
getestetes_inhalt_logfile.append(ergebnis)
else:
ergebnis = i
getestetes_inhalt_logfile.append(ergebnis)
inhalt_logfile = getestetes_inhalt_logfile
# Doppelte Eintraege loeschen
userID = list(set(inhalt_logfile)) # Neue Sequenz/Array mit allen Eintraegen aus der originalen Sequenz
# Ausgabe der UserID/Username und der Stundenanzahl # ABER ohne doppelte Eintraege
ausgewertetes_logfile_array = []
# for checkuserID in userID:
for checkuserID in userID:
ausgewertetes_logfile_array.append(checkuserID)
ausgewertetes_logfile_array.append(inhalt_logfile.count(checkuserID))
return ausgewertetes_logfile_array
def suche_option_auswahl():
option_suche = raw_input ("WAS soll gesucht werden? \n \n"
" userid.........................................................uid\n"
" username.......................................................username\n"
" groupid........................................................gid\n"
" username wird eingegeben und die UID wird ausgegeben...........username_uid\n"
" uid wird eingegeben und der username wird ausgegeben...........uid_username\n\n"
" Eingabe:")
return option_suche
def suchauswahl():
suchwert = raw_input ("Welcher STRING soll gesucht werden? ")
return suchwert
def yppasswdauswertung(suchwert, option_suche): # suchwert=STRING; option_suche=uid,username,etc.
# userID einem Benutzernamen zuordnen # Benoetigte IMPORTS sind:
# # "import subprocess"
# # "from subprocess import PIPE, Popen"
ypcatpasswdarray=[] # leeres Array erstellen
ypcatpasswdshell = Popen(["ypcat", "passwd"], stdout=PIPE) # Ausgabe von "ypcat passwd" wird gepiped
output = ypcatpasswdshell.communicate()[0] # Die "0" gibt stdout zurück (holt sich die Ausgabe der PIPE)
# Die "1" gibt stderr zurück
# print output
# Ausgabe von ypcat passwd wird in das Array geleitet
for line in output: # Nimmt den STRING "output" und leitet alles in das Array
a = line
ypcatpasswdarray.append(a)
# Aus dem Array ypcatpasswdarray wird tmparray # Aus einzelnen Buchstaben wird ein Datensatz
# print tmparray[0] gibt einen einzelnen Datensatz aus # Hier den ersten
tmpstring=[]
passwdzeile='' #ein leerer string
for einzelnerbuchstabe in ypcatpasswdarray:
if einzelnerbuchstabe == '\n':
passwdzeile=passwdzeile+einzelnerbuchstabe #zeilenstring zusammensetzen
tmpstring.append(passwdzeile)
passwdzeile='' #zeileninhalte loeschen
else:
passwdzeile+=(einzelnerbuchstabe)
# Ausgabe eines einzelnen Wertes aus einem Datensatz
username_maschinenname=[]
userID_maschinenID=[]
gruppenID=[]
for line in tmpstring:
words = line.split(':')
username_maschinenname.append(words[0])
userID_maschinenID.append(words[2])
gruppenID.append(words[3])
try:
if option_suche == "uid_username":
such_index = userID_maschinenID.index(suchwert)
return username_maschinenname[such_index]
if option_suche == "username_uid":
such_index = username_maschinenname.index(suchwert)
return userID_maschinenID[such_index]
if option_suche == "username":
such_index = username_maschinenname.index(suchwert)
return username_maschinenname[such_index]
elif option_suche == "gid":
such_index = gruppenID.index(suchwert)
return gruppenID[such_index]
elif option_suche == "uid":
such_index = userID_maschinenID.index(suchwert)
return userID_maschinenID[such_index]
else:
print "OPTION_SUCHE war: ", option_suche
return "OPTION_SUCHE war nicht username, gid oder uid"
except:
#print "Try User nicht vorhanden"
return "Abfrage nicht erfolgreich"
def logfile_auswerten():
ergebnis = logfile_oeffnen_und_auswerten()
for i, v in enumerate (ergebnis):
print i, v
return ergebnis
# HAUPTPROGRAMM
# Benutzersuche
print " "
print " "
print " "
print " "
# Abfrage ueber ein Menue - zum testen der Funktion !!
# ergebnis_suche_option_auswahl = suche_option_auswahl() # Was soll gesucht werden? (GID, UID, UserName)
# ergebnis_suchauswahl = suchauswahl() # Welcher STRING aus GID, UID oder UserName soll gesucht werden?
# print yppasswdauswertung(ergebnis_suchauswahl, ergebnis_suche_option_auswahl) # Aufruf der Funktion usersuche()
print logfile_oeffnen_und_auswerten()
#
# Beispiele fuer den Aufruf der Funktion yppasswdauswertung
# print yppasswdauswertung("1121","uid_username") ----> AUSGABE ist: heinz
# print yppasswdauswertung("frank","username_uid") ----> AUSGABE ist: 1011
# print logfile_auswerten()