Ausführen von Befehlen mit Echtzeit-Stdout-Erfassung
Um die Funktionalität eines Chatbots zu verbessern, besteht das Ziel darin, dies zu ermöglichen Führen Sie Skripte aus und streamen Sie die Standardausgabe direkt in den Chat. Die aktuelle Implementierung speichert jedoch die gesamte Standardausgabe bis zum Abschluss des Skripts. Um dieses Problem zu lösen, suchen wir nach einer Lösung, die eine Echtzeitausgabe bietet.
Der aktuelle Code nutzt die runcommand-Funktion, um Skripte auszuführen und deren Stdout zurückzugeben. Um eine Echtzeitausgabe zu implementieren, müssen wir die Ausführungs- und Ausgabeprozesse entkoppeln. Ändern wir den Code, um dieses Problem zu beheben:
<code class="go">func reboot(command *bot.Cmd) (string, error) { n := command.Args[0] go runcommand(n) return "", nil }</code>
Die aktualisierte Neustartfunktion initiiert die runcommand-Funktion als Goroutine. Dadurch kann die Skriptausführung gleichzeitig mit den Interaktionen des Chatbots erfolgen.
<code class="go">func runcommand(server string) { cmd := exec.Command("/bin/bash", "-c", "python test.py %s", server) cmdReader, err := cmd.StdoutPipe() if err != nil { fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err) return } scanner := bufio.NewScanner(cmdReader) for scanner.Scan() { fmt.Printf("\t > %s\n", scanner.Text()) } err = cmd.Run() if err != nil { fmt.Fprintln(os.Stderr, "Error starting Cmd", err) return } }</code>
Die geänderte runcommand-Funktion verwendet jetzt einen Scanner, um den Stdout des Skripts kontinuierlich zu überwachen. Jede Ausgabe wird sofort gedruckt, wodurch eine Standardausgabeerfassung in Echtzeit erreicht wird.
Mit diesen Änderungen kann der Chat-Bot effektiv Skripte ausführen und seine Standardausgabe in Echtzeit in den Chat streamen, was für ein verbessertes Benutzererlebnis sorgt.
Das obige ist der detaillierte Inhalt vonWie erreicht man eine Stdout-Erfassung in Echtzeit für die Skriptausführung in einem Chat-Bot?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!