美文网首页Golang语言社区Go语言用例
golang读取外部命令的屏幕输出

golang读取外部命令的屏幕输出

作者: CodingCode | 来源:发表于2017-12-09 12:37 被阅读11次

    golang调用外部程序,如何读取外部程序的stdout/stderr输出:

    例子1 读取标准输出

    $ cat main.go
    package main
    
    import (
        "fmt"
        "os/exec"
    )
    
    func main() {
        cmd := exec.Command("bash", "test.sh")
        out, err := cmd.Output()
        if err != nil {
            fmt.Println(err)
        }
        fmt.Printf("stdout=[%s]\n", string(out))
    }
    
    $ cat test.sh
    #!/bin/bash
    
    echo "OOOO-1"
    1>&2 echo "EEEE-1"
    echo "OOOO-2"
    1>&2 echo "EEEE-2"
    

    运行结果:

    $ ./main
    stdout=[OOOO-1
    OOOO-2
    ]
    

    cmd.Output()函数的功能是运行命令并返回其标准输出。

    例子2 读取标准输出和标准错误

    package main
    
    import (
        "fmt"
        "os/exec"
    )
    
    func main() {
        cmd := exec.Command("bash", "test.sh")
        out, err := cmd.CombinedOutput()
        if err != nil {
            fmt.Println(err)
        }
        fmt.Printf("stdout=[%s]\n", string(out))
    }
    

    运行结果

    $ ./main
    stdout=[OOOO-1
    EEEE-1
    OOOO-2
    EEEE-2
    ]
    

    cmd.ComninedOutput()函数的功能是运行命令,并返回标准输出和标准错误。

    例子3 分开读取标准输出和标准错误

    $ cat main.go
    package main
    
    import (
        "fmt"
        "log"
        "bytes"
        "os/exec"
    )
    
    func main() {
        var outbuf, errbuf bytes.Buffer
    
        cmd := exec.Command("bash", "test.sh")
        cmd.Stdout = &outbuf
        cmd.Stderr = &errbuf
    
        var err error = cmd.Run();
        if err != nil {
            log.Fatal(err)
        }
    
        fmt.Printf("Stdout: [%s]\n", string(outbuf.Bytes()))
        fmt.Printf("Stderr: [%s]\n", string(errbuf.Bytes()))
    }
    

    运行结果

    $ ./main
    Stdout: [OOOO-1
    OOOO-2
    ]
    Stderr: [EEEE-1
    EEEE-2
    ]
    

    相关文章

      网友评论

        本文标题:golang读取外部命令的屏幕输出

        本文链接:https://www.haomeiwen.com/subject/topuixtx.html