Heim > Artikel > Backend-Entwicklung > Wie kann man die Standardausführung der Befehlsausführung in Echtzeit erfassen?
Erfassen der Standardausführung der Befehlsausführung in Echtzeit
In einem Chatbot, der Befehle ausführt, müssen wir häufig die Standardausgabe der darin enthaltenen Skripte anzeigen die Chat-Oberfläche. Während die aktuelle Implementierung die gesamte Standardausgabe auf einmal sammelt und zurückgibt, suchen wir nach einer Lösung, die die Ausgabe in Echtzeit bereitstellt.
Die Überprüfung des angegebenen Codes zeigt eine Einschränkung, bei der die Standardausgabe in einem einzigen Funktionsaufruf abgerufen und zurückgegeben wird (Neustart()). Um Text in Echtzeit auszugeben, müssen wir den Ausführungsbefehl durchlaufen und die Standardausgabe kontinuierlich erfassen.
Der Schlüssel zu dieser Lösung ist die Verwendung der StdoutPipe-Methode, die es uns ermöglicht, eine Pipe zum Erfassen der Ausgabe von zu erstellen ein ausgeführter Befehl. Indem wir eine Pipe für die Standardausgabe des Befehls einrichten, können wir die Ausgabe kontinuierlich lesen und anzeigen.
Verbesserter Code:
<code class="go">package main import ( "os" "os/exec" "fmt" "bufio" ) func main() { // Specify the command to execute cmd := exec.Command("command", "arguments") // Create a pipe for the output of the script cmdReader, err := cmd.StdoutPipe() if err != nil { fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err) return } scanner := bufio.NewScanner(cmdReader) // Launch a goroutine to continuously read and display the output go func() { for scanner.Scan() { fmt.Printf("\t > %s\n", scanner.Text()) } }() // Start the execution of the command err = cmd.Start() if err != nil { fmt.Fprintln(os.Stderr, "Error starting Cmd", err) return } // Wait for the command to complete err = cmd.Wait() if err != nil { fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err) return } }</code>
In dieser verbesserten Lösung lesen wir kontinuierlich die Ausgabe der Standardausgabe des Befehls innerhalb einer Goroutine, was eine Echtzeitanzeige der Standardausgabe in der Chat-Oberfläche ermöglicht. Dadurch entfällt die Notwendigkeit eines großen Puffers und die Rückgabe der gesamten Standardausgabe in einem einzigen Funktionsaufruf wird vermieden, wodurch das ursprüngliche Problem behoben wird.
Das obige ist der detaillierte Inhalt vonWie kann man die Standardausführung der Befehlsausführung in Echtzeit erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!