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()