Script startet Server, jedoch Sperrung der Konsole, ausweg?

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

Script startet Server, jedoch Sperrung der Konsole, ausweg?

Beitragvon 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

Beitragvon mr.hide » 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

Beitragvon 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

Beitragvon 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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Script startet Server, jedoch Sperrung der Konsole, ausw

Beitragvon gerold » 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

Re: Script startet Server, jedoch Sperrung der Konsole, ausw

Beitragvon 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....

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder