Seite 1 von 1

prüfen ob ein prozess aktiv ist

Verfasst: Dienstag 3. März 2009, 19:25
von Sunjy
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

Verfasst: Dienstag 3. März 2009, 19:49
von b.esser-wisser
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

Verfasst: Dienstag 3. März 2009, 20:05
von Sunjy
ä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 :/

Verfasst: Dienstag 3. März 2009, 20:14
von derdon
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'])

Verfasst: Dienstag 3. März 2009, 20:16
von b.esser-wisser
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

Verfasst: Dienstag 3. März 2009, 20:23
von snafu
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. ;)

Verfasst: Dienstag 3. März 2009, 20:26
von snafu
b.esser-wisser hat geschrieben:python-Programm:
Warum nicht direkt `subprocess.check_call()`?

Verfasst: Dienstag 3. März 2009, 20:49
von Sunjy
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 =)

Verfasst: Dienstag 3. März 2009, 22:39
von b.esser-wisser
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