从 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中文网其他相关文章!