Lesen von Stdout aus einem Subprozess

8

Ich versuche einen Subprozess von Golang zu erstellen. Ziel ist es, die Eingabe Zeile für Zeile zu lesen und zu verarbeiten. Hier ist, was ich versuche zu arbeiten:

%Vor%

In diesem Beispiel wird "Scanner erstellt" gedruckt, danach passiert jedoch nichts.

Das Ausführen dieses Befehls führt jedoch dazu, was ich zu drucken erwartet:

%Vor%

Und das Ändern des Codes, um direkt nach stdout zu kopieren, funktioniert genauso gut:

%Vor%

Was fehlt mir, was mich davon abhält, die Ausgabe zu lesen?

    
tgrosinger 20.12.2014, 04:24
quelle

2 Antworten

4

Es gibt mehrere Dinge, die Sie überprüfen sollten.

  1. Der von cmd.StdoutPipe() zurückgegebene Fehlercode wurde nicht überprüft. Es sollte sein.

  2. Für den Befehl pocketsphinx_continuous müssen die Argumente -hmm und -dict angegeben werden. Andernfalls wird es fehlschlagen und die gesamte Ausgabe wird tatsächlich an stderr und nicht stdout gesendet. Hier lesen Sie nur stdout , aber es gibt nichts zu lesen.

  3. Sie sollten cmd.Wait() nicht aufrufen, bevor Sie sicher sind, dass alle Daten von stdout gelesen wurden. Das Ergebnis ist nicht deterministisch (tatsächlich ist es eine Race-Bedingung). Überprüfen Sie die Dokumentation zum os/exec -Paket. Wenn Sie unbedingt das Parsing in einer Goroutine durchführen müssen, müssen Sie mit dem Ende der Goroutine synchronisieren, bevor cmd.Wait() aufgerufen wird. Zum Beispiel könnten Sie die Funktion schreiben als:

    %Vor%

    und der Hauptcode als:

    %Vor%
Didier Spezia 20.12.2014 11:12
quelle
0

Scheint, Sie brauchen nicht

%Vor%

wegen

%Vor%

mach Systemgabel selbst also nur

%Vor%

würde mir ausreichen (nicht dafür, dass die Gorouting dazu gebracht wird)

    
Uvelichitel 27.12.2014 18:43
quelle

Tags und Links