Prozessverwalten und Ausgabenkontrolle

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
lordfinal
User
Beiträge: 2
Registriert: Montag 25. Januar 2010, 16:45

Hi,

ich will aus Auswertungsgruenden ein Programm ueber ein Pythonskript starten ( allerdings immer nur 1 soll zur gleichen Zeit aktiv / gestartet sein ) und aus der den Ausgaben des Programms will ich dann Berechnungen durchfuehren.

Code: Alles auswählen

import os


step = 1000
# Elemente Anzahl aendern
while step <= 100000000:
	
	for i in range(1,20):   
		prog = "echo"
		argument = str(i)
		os.system(prog + " " + " ".join(argument) + ">> ./output.txt")	
	step = step * 10

Hat jemand ne Ahnung wo ich weiter machen kann? Sollte ich statt os.system lieber einen subprocess benutzen? Oder sollte ich mittels Wait() warten bis der Process beendet ist?

Danke fuer Antworten
problembär

Wenn Du die Programmausgabe abfangen willst, solltest Du "subprocess" verwenden.
In einfachen Fällen tut's meiner Meinung nach aber auch "os.popen()".

Gruß
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Was sind denn einfache Fälle? `os.popen()` benutzt halt immer eine Shell, das mag man in der Regel vermeiden.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
lordfinal
User
Beiträge: 2
Registriert: Montag 25. Januar 2010, 16:45

Ich bin weitergekommen, aber ich haenge gerade daran, dass ich nicht abwarte, bis der ausgefuehrte Process fertig ist. Ich versuche es gerade mit Popen.communicate() aber ich bekomme eine Fehlermeldung, dass diese Funktion nicht bekannt sei. Was kann ich da machen?

Code: Alles auswählen

import os
import subprocess

step = 1000
# Elemente Anzahl aendern
while step <= 100000000:
	
	for i in range(1,20):   
		
		cmd = ["echo",str(step),str(i)]
		
		# Create output log file
		outFile = os.path.join(os.curdir, "output.log")
		outptr = file(outFile, "w+")

		# Create error log file
		errFile = os.path.join(os.curdir, "error.log")
		errptr = file(errFile, "w+")

		
		retval = subprocess.call(cmd, 0, None, None, outptr, errptr)
		#retval.wait()
               retval.communicate() 

		if not retval == 0:
			errData = errptr.read()
			errptr.close()

	  
	step = step * 10		
errptr.close()
outptr.close()
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

`subprocess.call()` wartet eigentlich, bis der Prozess fertig ist. Es wird ja auch nur der Return-Code vom Prozess zurückgegeben und kein `Popen`-Objekt.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
Antworten