在go语言中使用os.Exec()函数执行一条shell命令到另一个命令的管道输出

2023-06-01 00:00:00 函数 命令 管道

你想用os.Exec()函数执行一条shell命令,等待它完成,然后用管道将其输出到另一条shell命令。

在Unix/Linux中,可以使用下面类似的命令,例如:

 ls | wc -l


在go中的解决方案:

使用io.Pipe()函数将第一条执行命令的输出管道到第二条执行命令。


示例代码:

package main

 import (
         "bytes"
         "io"
         "os/exec"
         "fmt"
 )
 
 func main() {
         first := exec.Command("ps", "-ef")
         second := exec.Command("wc", "-l")
         
         // http://golang.org/pkg/io/#Pipe
         reader, writer := io.Pipe()
         
         //将第一条命令的输出推送给写入者
         first.Stdout = writer
         
         //从第一条命令的输出读出
         second.Stdin = reader
         
         // 准备一个缓冲区来捕获输出。
         // 在第二条命令执行完毕后
         var buff bytes.Buffer
         second.Stdout = &buff
         first.Start()
         second.Start()
         first.Wait()
         writer.Close()
         second.Wait()
         
             // 将输出转换为字符串
         total := buff.String() 
         fmt.Printf("正在运行的总进程 : %s", total)
 }

输出:

正在运行的总进程:89

参考资料:

http://golang.org/pkg/io/#Pipe

相关文章