登录
首页 >  Golang >  Go问答

运行 os.execute 获取输出

来源:stackoverflow

时间:2024-04-26 14:39:37 499浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《运行 os.execute 获取输出》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我使用以下代码对二进制文件运行命令并需要提供输出

如果我在我的 mac 中运行命令 ftr get apps

[app1 apps2]

现在我将二进制文件复制到测试数据文件夹 并运行下面的代码,我想获取应用程序,目前没有错误,但我还没有获取数据,这里可能缺少什么?

Cmd := exec.Command("ftr", "get", "apps")
    Cmd.Dir = "./testdata/"
    err := Cmd.Start()
    fmt.Println(err)
    bytes, e := Cmd.Output()
    fmt.Println(bytes, e)

解决方案


您不会直接获得输出,因为命令在写入 stdout/stderr 之前需要一些时间,因此您基本上需要等待一些内容输出。

您可以使用 bufio.newscanner 来做到这一点,如下所示:

package main

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

func main() {
    args := "get apps"
    cmd := exec.Command("ftr", strings.Split(args, " ")...)
    cmd.Dir = "./testdata/"

    stdout, _ := cmd.StdoutPipe()
    cmd.Start()

    scanner := bufio.NewScanner(stdout)
    scanner.Split(bufio.ScanWords)

    for scanner.Scan() {
        m := scanner.Text()
        fmt.Println(m)
    }

    cmd.Wait()
}

如果您的命令在 stderr 而不是 stdout 上写入,则可能需要使用 cmd.stderrpipe 而不是 cmd.stdoutpipe 才能获取输出。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>