首页 > 后端开发 > Golang > 如何在 Go 中流式传输命令输出以获取实时结果?

如何在 Go 中流式传输命令输出以获取实时结果?

Mary-Kate Olsen
发布: 2024-11-20 13:32:17
原创
444 人浏览过

How to Stream Command Output in Go for Live Results?

实时结果的流式命令输出

在 Go 中执行命令允许您与外部进程交互,但如果您需要实时输出,有一种方法来实现它。

在您的代码片段中,命令完成后会立即打印所有输出。要实时显示输出,您可以结合下面概述的技术:

// ... Previous code

for _, cp := range cmdParams {
    log.Printf("Starting %s in folder %s...", cp[1:], cp[0])
    cmd := exec.Command(cp[1], cp[2:]...)
    cmd.Dir = cp[0]

    stdout, err := cmd.StdoutPipe()
    if err != nil {
        log.Printf("%s cmd.StdoutPipe() error: %v\n", cp[1:], err)
        return
    }
    // Start command:
    if err = cmd.Start(); err != nil {
        log.Printf("%s start error: %v\n", cp[1:], err)
        return
    }

    // Stream command output:
    scanner := bufio.NewScanner(stdout)
    scanner.Split(bufio.ScanRunes)
    for scanner.Scan() {
        fmt.Print(scanner.Text())
    }
    if scanner.Err() != nil {
        log.Printf("Reading %s stdout error: %v\n", cp[1:], err)
        return
    }

    // Get execution success or failure:
    if err = cmd.Wait(); err != nil {
        log.Printf("Error running %s: %v\n", cp[1:], err)
        return
    }
    log.Printf("Finished %s", cp[1:])
}

// ... Remaining code
登录后复制

说明

此修改使用 bufio.Scanner 实时读取命令的标准输出。 Split(bufio.ScanRunes) 指示扫描仪读取单个字符,这使您可以在生成输出时显示输出。

通过重复调用scanner.Scan() 并打印scanner.Text() 直到到达输出末尾时,您可以在屏幕上实时传输命令的输出。

以上是如何在 Go 中流式传输命令输出以获取实时结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板