通过实时标准输出捕获执行命令
为了增强聊天机器人的功能,目标是使其能够执行脚本并将标准输出直接流式传输到聊天中。但是,当前的实现会存储整个标准输出,直到脚本结束。为了解决这个问题,我们寻求一种提供实时输出的解决方案。
当前代码利用 runcommand 函数来执行脚本并返回其标准输出。要实现实时输出,必须将执行过程和输出过程解耦。让我们修改代码来解决这个问题:
<code class="go">func reboot(command *bot.Cmd) (string, error) { n := command.Args[0] go runcommand(n) return "", nil }</code>
更新后的重启函数将 runcommand 函数作为 goroutine 启动。这允许脚本执行与聊天机器人的交互同时发生。
<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>
修改后的 runcommand 函数现在使用扫描器来连续监视脚本的标准输出。任何输出都会立即打印,实现实时标准输出捕获。
通过这些更改,聊天机器人可以有效地执行脚本并将其标准输出输出实时传输到聊天中,从而提供增强的用户体验。
以上是如何在聊天机器人中实现脚本执行的实时标准输出捕获?的详细内容。更多信息请关注PHP中文网其他相关文章!