Script startet Server, jedoch Sperrung der Konsole, ausweg?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
marcin

Mittwoch 21. Dezember 2005, 11:50

Hallo,

hab ein Problem, bei meinem Prog. Erstmal Situation:
Ich muß ein prog schreiben das einen Server ständig neu startet (mit veränderter Config) und beendet. An sich kein Problem, jedoch:

Der server, wird mit server.exe gestartet, jedoch ist es so, dass selbst wenn ich unter der Kommandozeile(von WINDOWS!) server.exe ausführe, dann blockiert die exe die Konsole, rufe ich den Befehl bei Python mit os.system("server.exe") auf, dann unterbricht dies die Ausführung des Skripts! Habe mir folgende Gedanken gemacht:
1. Unter Unix wäre mir das nicht passiert, dafür gibts nämlich ein Script "Start/Stop server"
2. Einen Thread schreiben, hier das Ergebnis:

Code: Alles auswählen

class ServerThread(threading.Thread):
	def __init__(self):
		threading.Thread.__init__(self)
		
	def setStartCmd(self, cmd):
		self.cmd = cmd
		self.vRet = None
		
	def run(self):
		self.vRet = os.system(self.cmd)
Funktioniert auch, aber ich weiß nicht wie ich den Thread (und damit auch den Server stoppen könnte. In der Kommandozeile tippe ich dazu CTRL + C ein.
3. Eigentlich wollte ich Threading vermeiden, aber os.system("cmd /c server.exe") ruft genau das gleiche Problem hervor.
4. Im Grunde ist der server ein service und sollte auch so unter Win gestartet werden, aber als normaler Benutzer fehlen mir unter NT die Rechte, also muß ich mit der server.exe arbeiten.

Falls jemand aus meiner Beschreibung schlau geworden ist und eine Lösung hat, dann wäre ich echt dankbar.

Edit (Leonidas): Code in Python-Tags gesetzt.
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

Mittwoch 21. Dezember 2005, 12:42

Auf anhieb fällt mir auch nur eine Dreckige Lösung ein.

Der Thread hat normalerweise eine eigen PID, damit kannst du den killen...


Aber ich wäre auch an einer sauberen Lösung interessiert ..

Grüße
Matthias
Gast

Mittwoch 21. Dezember 2005, 12:49

Also die Lösung kann ich nicht benutzen, denn der Server muß richtig runterfahren. Hab ein bißchen gestöbert und folgendes gefunden im modul signal kann ich irgendwie ein SIGTERM schicken, jedoch kein Plan wie, hat einer damit Erfahrung und wuesste wie ich das anstellen soll?
BlackJack

Donnerstag 22. Dezember 2005, 00:40

Das `signal` Modul enthält Funktionen um auf Signale zu reagieren, nicht um sie zu verschicken. Das kann man mit `os.kill()` allerdings nur unter richtigen Betriebssystemen (Mac und Unix) :wink:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 22. Dezember 2005, 08:44

marcin hat geschrieben: Ich muß ein prog schreiben das einen Server ständig neu startet (mit veränderter Config) und beendet. An sich kein Problem, jedoch:
Hi marcin!

Du könntest aus deinem Programm einen Windows-Dienst machen.

http://agiletesting.blogspot.com/2005/0 ... ndows.html

So ein Dienst kann über die Kommandozeile mit den Befehlen "net start <dienstname>" und "net stop <dienstname>" gestartet und beendet werden.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

Freitag 6. Januar 2006, 12:36

gerold hat geschrieben: Du könntest aus deinem Programm einen Windows-Dienst machen.
Hi,

sorry die späte Antwort, hatte aber Urlaub....
Danke für den Vorschlag Gerold, aber das ist zu komplex, denn das skript muss von beliebigen leuten gestartet werden können, ohne dass sie an der reg rumspielen und so...

Mittlerweile möchte ich am liebsten dem Thread ein SIGTERM schicken, dass muss doch irgendwie machbar sein, oder?
@BlackJack: Danke für die Aufklärung, gibts aber kein Modul, wo ich dann so ein SIGTERM schicken kann? os.kill() wäre am besten, aber verfluchtes Win rafft das ja wieder nicht....
Antworten