Ich habe Schwierigkeiten, ein Python-Skript zu erhalten, um einen Subprozess zu starten, warten, bis es abgeschlossen ist und dann die erforderlichen Daten abrufen. Ich bin ziemlich neu in Python.Starten Sie einen Subprozess, warten Sie auf den Abschluss und dann Daten in Python
Der Befehl, den ich als Unterprozess ausführen möchten ist
./bin.testing/Eva -t --suite="temp0"
diesen Befehl von Hand in das Terminal Linux laufen produziert:
in terminal mode
Evaluation error = 16.7934
ich den Befehl als Python Unter ausführen möchten verarbeiten und die Ausgabe zurück erhalten. Aber alles, was ich versuche, die zweite Zeile zu überspringen scheint (. Letztlich ist es die zweite Zeile, die ich will) Im Moment habe ich dies:
def job(self,fen_file):
from subprocess import Popen, PIPE
from sys import exit
try:
eva=Popen('{0}/Eva -t --suite"{0}"'.format(self.exedir,fen_file),shell=True,stdout=PIPE,stderr=PIPE)
stdout,stderr=eva.communicate()
except:
print ('Error running test suite '+fen_file)
exit("Stopping")
print(stdout)
.
.
.
return 0
All dies zu produzieren scheint, ist
in terminal mode
0
mit der wichtigen Zeile fehlt. Die print-Anweisung ist nur, damit ich sehen kann, was ich aus dem Unterprozess zurückerhalte - die Absicht ist, dass es durch Code ersetzt wird, der die Nummer aus der zweiten Zeile verarbeitet und die Ausgabe zurückgibt (hier komme ich gerade zurück) 0, damit ich dieses spezielle Bit zuerst zur Arbeit bringen kann: Der Aufrufer dieser Funktion gibt das Ergebnis aus, weshalb am Ende der Ausgabe eine Null steht. Exedir ist nur das Verzeichnis der ausführbaren Datei für den Unterprozess und fen-file ist nur eine ASCII-Datei, die der Unterprozess benötigt. Ich habe versucht, den "im Terminal-Modus" aus dem Quellcode des Unterprozesses zu entfernen und kompilieren, aber das funktioniert nicht - es gibt immer noch nicht die wichtige zweite Zeile.
Vielen Dank im Voraus; Ich vermute, was ich falsch mache, ist wirklich sehr einfach.
Edit: Ich sollte hinzufügen, dass der Subprozess Eva kann eine Sekunde oder zwei zu vervollständigen.
Hallo, vielleicht die ‚Bewertung Fehler‘ irreführend ist, aber es ist nicht eine Fehlermeldung: es ist der Ausgang des Teilprozesses erwünscht ist, ist die die quadrierte Differenz zwischen einer berechneten und einer gemessenen Menge wird eine Berechnung. Übergeben Sie eine Liste, entfernen Sie die Shell = true und entfernen Sie die doppelten Anführungszeichen, wie Sie es vorgeschlagen haben.Vielen Dank! – ppyvabw
@ppyvabw Weißt du, es könnte die '" -Suite "{0}" 'sein - ich habe nicht erwähnt, dass du das' = 'verpasst hast, aber es in meiner Version enthalten! – rrauenza