Liste in String
Verfasst: Sonntag 19. September 2010, 14:29
Hi, ich bin hier neu und fange gerade erst mit Python an.
Ich verwende auf unserem Server Python 2.5 (Debian Lenny).
Es ist schon wichtig, dass das Script auch mit dieser Version funktioniert, da ich das später in unserem Forum für die Allgemeinheit anbieten will.
Die meisten GameServeradmins setzen Debian Lenny ein, welches zur Zeit python 2.5 beinhaltet.
Zur Zeit arbeite ich daran einen Watchdog, den ich in Shell-Script für GameServer geschrieben habe, in Python umzusetzen.
Um zum eigentlichen Problem zu kommen. Ich lese eine Liste aus, in der Admins eingetragen sind (Liste wird später aus einer Datei gelesen).
Mein eigentliches Problem ist, dass ich es so einfach wie möglich machen will.
Hier der Beispielcode, der so nicht funktionieren kann:
Klar, es liegen hier zwei verschiedene Objekttypen vor. Dazu kommt noch das Problem, wenn es funktionieren würde, dass der String auch gefunden wird, wenn die SteamID im Log länger ist, aber den gesuchten String beinhaltet. Kommt bei einer SteamID in seltenen Fällen vor, aber ist halt möglich. So könnte dann ein nicht-Admin auch einen chatbefehl auf dem Gameserver ausführen, was in einem Liga-Match nicht gerade optimal ist.
Das Beispiel hab ich dann so gelöst, was aber sicherlich nicht optimal ist:
Sicherlich lässt sich mit einer einfachen Funktion am jeweils am Ende und am Anfang das Zeichchen '<' und '>' einsetzen.
Es ist schon wichtig, dass die Ausführungszeit so kurz wie möglich ist, da aus einem Screenlog Zeile für Zeile geparst wird (Shell-Script like: tail -f | while read line; do foo; done).
Das dann auch noch für jeden der fünf WarServer.
Ziel ist es bei bestimmten Chatbefehlen Befehle auf dem Server auszuführen (screen -S name -p server -X stuff $'zb_lo3\n'). Wer sich mal das komplette ShellScript ansehen will, kann es hier herunterladen: http://download.sa-hosting.eu/temp/watc ... ate.tar.gz
Das Script funktioniert soweit, aber wie man sicherlich erkennen kann, ist der Code sehr unleserlich und lässt sich schlecht erweitern. Viele verlieren schon den Überblick nach den ersten Zeilen
Es soll nur der Watchdog in Python geschrieben werden. Den Rest lasse ich erstmal so, da es funktioniert.
Ich bin für jeden Hinweis dankbar. Mir würde schon ein Anstoß in die richtige Richtung ausreichen. Immerhin ist Python sehr gut dokumentiert, übersichtlich und die Community scheint sehr offen und freundlich zu sein. Genau mein Geschmack.
Ich verwende auf unserem Server Python 2.5 (Debian Lenny).
Es ist schon wichtig, dass das Script auch mit dieser Version funktioniert, da ich das später in unserem Forum für die Allgemeinheit anbieten will.
Die meisten GameServeradmins setzen Debian Lenny ein, welches zur Zeit python 2.5 beinhaltet.
Zur Zeit arbeite ich daran einen Watchdog, den ich in Shell-Script für GameServer geschrieben habe, in Python umzusetzen.
Um zum eigentlichen Problem zu kommen. Ich lese eine Liste aus, in der Admins eingetragen sind (Liste wird später aus einer Datei gelesen).
Mein eigentliches Problem ist, dass ich es so einfach wie möglich machen will.
Hier der Beispielcode, der so nicht funktionieren kann:
Code: Alles auswählen
admins = ['STEAM_0:0:xxxx','STEAM_0:0:aaaaa','STEAM_0:0:zzz','STEAM_0:0:yyy']
log = 'L 09/19/2010 - 14:51:20: "Player<87><STEAM_0:0:zzz><TERRORIST>" say "!rr"'
if admins in log and 'say' in log:
print 'Admin gefunden'
Das Beispiel hab ich dann so gelöst, was aber sicherlich nicht optimal ist:
Code: Alles auswählen
admins = ['STEAM_0:0:xxxx','STEAM_0:0:aaaaa','STEAM_0:0:zzz','STEAM_0:0:yyy']
log = 'L 09/19/2010 - 14:51:20: "Player<87><STEAM_0:0:zzz><TERRORIST>" say "!rr"'
def admincheck(admins, string):
for admin in admins:
if '<' + admin + '>' in string:
return True
return False
if admincheck(admins, log) and 'say' in log:
print 'Admin gefunden'
Es ist schon wichtig, dass die Ausführungszeit so kurz wie möglich ist, da aus einem Screenlog Zeile für Zeile geparst wird (Shell-Script like: tail -f | while read line; do foo; done).
Das dann auch noch für jeden der fünf WarServer.
Ziel ist es bei bestimmten Chatbefehlen Befehle auf dem Server auszuführen (screen -S name -p server -X stuff $'zb_lo3\n'). Wer sich mal das komplette ShellScript ansehen will, kann es hier herunterladen: http://download.sa-hosting.eu/temp/watc ... ate.tar.gz
Das Script funktioniert soweit, aber wie man sicherlich erkennen kann, ist der Code sehr unleserlich und lässt sich schlecht erweitern. Viele verlieren schon den Überblick nach den ersten Zeilen

Es soll nur der Watchdog in Python geschrieben werden. Den Rest lasse ich erstmal so, da es funktioniert.
Ich bin für jeden Hinweis dankbar. Mir würde schon ein Anstoß in die richtige Richtung ausreichen. Immerhin ist Python sehr gut dokumentiert, übersichtlich und die Community scheint sehr offen und freundlich zu sein. Genau mein Geschmack.