Seite 1 von 1
Windows Cmd Prozess beenden und Programm schließen
Verfasst: Dienstag 30. Juli 2019, 10:10
von Patrick1990
Hallo,
folgendes Problem:
Ich starte aus einem Python-Programm heraus mehrere Programme unter Windows durch
Code: Alles auswählen
processes = (Popen(cmd, shell=True, stdout=PIPE) for cmd in list_commands)
.
Die Liste der Kommandos beinhaltet jeweils einen Pfad zu einer Batch-Datei, die dann ausgeführt wird.
Nun werden nur so viele Progamme parallel gestartet, wie ich vorher festlege:
Code: Alles auswählen
running_processes = list(islice(processes, max_process_number))
Anschließend werden die laufenden Prozesse überwacht und sobald einer beendet wurde, wird ein neuer gestartet.
So lange, bis alle Programme (Prozesse) durchlaufen sind.
Nun möchte ich einen Timeout einbauen, welcher das laufende Programm bei Zeitüberschreitung beenden und erneut starten soll.
Hier liegt nun mein Problem - mit
kann ich zwar den Prozess beenden, jedoch bleibt das Windows-Programm geöffnet - und das soll nicht sein.
Könnt ihr mir da irgendwie helfen, bzw. ist das überhaupt möglich?
Habe schon einiges gelesen, das sowas auf Unix-Systemen in Verbindung mit der Signal-Bibliothek funktioniert - aber leider nicht unter Windows.
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Dienstag 30. Juli 2019, 10:16
von __deets__
Die Aussage "kann ich zwar den Prozess beenden, jedoch bleibt das Windows-Programm geöffnet" ist ein Widerspruch. Was passiert da genau, welches Verhalten sprichst du da an?
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Dienstag 30. Juli 2019, 10:22
von Patrick1990
Verstehe jetzt nicht worauf du hinaus willst.
Ich meine das process.kill() nicht das Windows-Progamm schließt.
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Dienstag 30. Juli 2019, 10:25
von Sirius3
Wenn Du eine Batch-Datei startest, die wiederum andere Programme startet, dann sind die anderen Programme unter Windows unabhängig vom ursprünglichen startenden Programm. Mit psutil kannst Du über children alle Kindprozesse finden. Das kannst Du dann rekursiv machen, um den gesamten Baum an Prozessen zu finden, die von Deinem Batch-Skript gestartet wurden und sie allesamt beenden.
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Dienstag 30. Juli 2019, 10:29
von Patrick1990
Sowas in der Art dachte ich mir schon - wäre es ein Möglichkeit die Programme direkt aus Python zu starten ohne die Batch-Datei bzw. wäre mein Vorhaben dann realisierbar?
Ich muss letztendlich sowas in der Art
Code: Alles auswählen
%Windows_Programm% -runscriptandexit %Skript_welches_von_Windows_Programm_gelesen_wird%
generieren.
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Dienstag 30. Juli 2019, 10:30
von Sirius3
Muß mich korrigieren:
Mit psutil kannst Du über children alle Kindprozesse finden. Das kannst Du dann rekursiv machen, um den gesamten Baum an Prozessen zu finden, die von Deinem Batch-Skript gestartet wurden und sie allesamt beenden.
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Dienstag 30. Juli 2019, 10:32
von __blackjack__
@Patrick1990: Das klingt alles ein bisschen als würdest Du einem `multiprocessing.Pool` selbst nachprogrammieren – warum?
Was die Frage der Batchdatei angeht: Probier's doch einfach aus.
Ich bin mir jetzt nicht ganz sicher was Deine Syntax da bedeuten soll, also ob ``%Windows_Programm%`` tatsächlich so in der Batch-Datei steht oder ob das hier als Platzhalter/Umgebungsvariable gemeint ist. Umgebungsvariablen kann man in Python jedenfalls abfragen: `sys.environ`.
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Dienstag 30. Juli 2019, 10:35
von Patrick1990
Das waren gerade nur Platzhalter fürs Forum.
Ich habe mich mit dem Multiprocessing-Modul noch nicht auseinander gesetzt - sollte ich evtl. mal machen wenn es evtl. Vorteile bietet.
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Dienstag 30. Juli 2019, 10:40
von __blackjack__
Alternativ wäre auch `concurrent.futures` interessant.
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Mittwoch 31. Juli 2019, 07:59
von Patrick1990
Habe nun meinen vorherigen Code mit concurrent.futures nachgestellt.
Hier gibt es auch die Möglichkeit einen Timeout zu realisieren.
Werde nun mal die von Sirius3 beschriebene Methode versuchen umzusetzen, um die von den Batch-Skripten aufgerufenen Programme zu schließen.
Anschließend muss ich diese erneut starten.
Re: Windows Cmd Prozess beenden und Programm schließen
Verfasst: Mittwoch 31. Juli 2019, 10:49
von Patrick1990
Bekomme leider keinen Zugriff auf die von den Batch-Dateien ausgeführten Prozesse - kann sie also nicht beenden.