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:
Was fehlt mir, was mich davon abhält, die Ausgabe zu lesen?
Es gibt mehrere Dinge, die Sie überprüfen sollten.
Der von cmd.StdoutPipe()
zurückgegebene Fehlercode wurde nicht überprüft. Es sollte sein.
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.
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:
und der Hauptcode als:
%Vor%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)
Tags und Links go