prüfen ob ein prozess aktiv ist

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

Hallo,
ich bin der Neue ^^.

Also ich hab ein kleines Problem, seit ca. 1 1/2 Stunden google ich und finde nichts...
In einem meiner Programme starte ich eine batch-datei, welche ja die cmd aktiviert. Das Programm soll aber erst weiterarbeiten, wenn die cmd sich wieder geschlossen hat, da diese nicht immer gleich lang geöffnet ist kann ich keinen festen wert angeben und mit sleep() oder ähnlichem warten.

Ich dachte mir einfach in einer while-schleife zu überprüfen ob der Prozess 'cmd.exe' noch aktiv ist und erst wenn er es nicht mehr ist, aus der Schleife zu springen und weiter zu machen.

Ich hoffe mir kann wer dabei helfen,
schön wärs natürlich, wenn das ganze nicht allzuaufwendig (sprich 10 Zeiler oder noch mehr) ist. Da ich aber davon keine Ahnung habe, weis ich natürlich auch nicht wie kurz es geht ^^.

Danke schonmal
Sunjy
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Suchst du "subprocess.call"?
call( *popenargs, **kwargs)
Run command with arguments. Wait for command to complete, then return the returncode attribute.

The arguments are the same as for the Popen constructor. Example:

retcode = call(["ls", "-l"])
hth, Jörg
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

ähm sorry, ich bin zwar eigentlich kein Anfänger in Python aber damit kenn ich mich auch nicht aus. ich wüsste jetzt spontan nicht was ich da als Parameter übergeben müsste um zu erfahren ob cmd.exe läuft.

Sorry :/
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Wenn die cmd.exe von einem Pythonskript aus gestartet wird, dann sollte dies so geschehen:

Code: Alles auswählen

import subprocess
subprocess.call(['cmd.exe'])
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

python-Programm:

Code: Alles auswählen

import subprocess
#starte Externes Programme und WARTE bis es fertig ist
return_code = subprocess.call(["test.bat", "10", "Hallo welt!"])
# FALLS du .bat bzw. .cmd Dateien so nicht starten kannst, geht es so
#return_code = subprocess.call(["cmd.exe", "test.bat", "10", "Hallo welt!"])
if return_code == 0:
    print "batch run successfully"
(Beispiel-) Batch-Datei

Code: Alles auswählen

rem Test.bat
@echo off
sleep %1
echo %2
hth, Jörg
edit: Komma vergessen
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sunjy hat geschrieben:ich wüsste jetzt spontan nicht was ich da als Parameter übergeben müsste um zu erfahren ob cmd.exe läuft.
Dass der Prozess noch lebt, merkst du daran, dass Python bei `subprocess.call()` solange blockiert bis der Prozess beendet ist. Was die zu übergebenden Parameter angeht, könnte ein Blick in die Doku zu [mod]subprocess[/mod] weiterhelfen. ;)
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

b.esser-wisser hat geschrieben:python-Programm:
Warum nicht direkt `subprocess.check_call()`?
Benutzeravatar
Sunjy
User
Beiträge: 31
Registriert: Dienstag 3. März 2009, 19:13
Wohnort: 127.0.0.1
Kontaktdaten:

Hi,
also ich hab jetzt mal einfach
subprocess.call(['D:/a.bat'])
benutzt, das funktioniert eigentlich genau so wie ich es möchte. Die Datei wird gestartet und sobald sie fertig ist, geht es weiter im Hauptprogramm.

Aber nach sowas würd ich mich glaub totgooglen.
Danke =)
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

snafu hat geschrieben:
b.esser-wisser hat geschrieben:python-Programm:
Warum nicht direkt `subprocess.check_call()`?
Ok, den Absatz hätte ich in der Doku dann weiterlesen sollen :oops:
"check_call" ist in den meisten Fallen besser, klar.
Sunjy hat geschrieben:Aber nach sowas würd ich mich glaub totgooglen.
Deshalb ist am ende des offiziellen Tutorials (auf deiner Festplatte) die "Brief Tour of the Standard Library" :twisted:

oups, Jörg
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
Antworten