首页 >后端开发 >Golang >如何在 Go 中检索 Shell 命令的实时输出?

如何在 Go 中检索 Shell 命令的实时输出?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-11 02:56:09262浏览

How to Retrieve Realtime Output from Shell Commands in Go?

从 Go 中的 Shell 命令检索实时输出

问题:

你想要执行Go 中的 shell 命令可能需要时间并检索其实时输出以进行处理并显示为进度

解决方案:

1.使用 os/exec 执行 Shell 命令:

使用 exec.Command 创建命令来执行所需的 shell 命令。

2.捕获标准错误 (stderr) 输出:

默认情况下,来自 shell 命令的诊断消息将发送到 stderr 而不是 stdout。使用 cmd.StderrPipe() 捕获 stderr 流。

3.创建一个扫描器来读取输出:

使用 bufio.NewScanner 创建一个读取 stderr 流的扫描器。使用 bufio.ScanWords 将扫描拆分为单词以获得单独的输出行。

4.处理和显示输出:

在循环内,使用scanner.Scan() 方法检索每个输出行。对其进行处理以提取所需的信息,例如进度比。然后,显示处理后的输出。

5.示例代码:

以下示例代码演示了如何执行此操作:

package main

import (
    "bufio"
    "fmt"
    "os/exec"
    "strings"
)

func main() {
    args := "-i test.mp4 -acodec copy -vcodec copy -f flv rtmp://aaa/bbb"
    cmd := exec.Command("ffmpeg", strings.Split(args, " ")...)

    stderr, _ := cmd.StderrPipe()
    cmd.Start()

    scanner := bufio.NewScanner(stderr)
    scanner.Split(bufio.ScanWords)
    for scanner.Scan() {
        m := scanner.Text()
        fmt.Println(m)
    }
    cmd.Wait()
}

通过执行以下步骤,您可以检索 shell 命令和进程的实时输出它用于显示进度信息或任何其他所需信息。

以上是如何在 Go 中检索 Shell 命令的实时输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn