如何实时捕获命令执行的输出
问题:
何时从聊天机器人中执行命令时,标准输出输出会在命令结束时立即返回。为了实现实时输出,需要修改其执行方式以实时写入。
建议的解决方案:
提供的函数一次性收集所有 stdout 输出并在完成后返回。我们可以通过使用管道实时捕获输出来改进这一点。
实现:
<code class="go">package main import ( "os" "os/exec" "fmt" "bufio" ) func main() { cmd := exec.Command("tail", "-f", "/usr/local/var/log/redis.log") // 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) go func() { for scanner.Scan() { fmt.Printf("\t > %s\n", scanner.Text()) } }() err = cmd.Start() if err != nil { fmt.Fprintln(os.Stderr, "Error starting Cmd", err) return } err = cmd.Wait() if err != nil { fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err) return } }</code>
使用这种方法,执行的标准输出命令将实时传输到聊天频道,以便即时反馈和互动沟通。
以上是如何从聊天机器人实时捕获命令输出?的详细内容。更多信息请关注PHP中文网其他相关文章!