go - 运行 os.execute 以获取输出

标签 go command command-line-interface

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

如果我在我的 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 以获得输出。

关于go - 运行 os.execute 以获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135210/

相关文章:

go - 在 GO 语言中将方法从一个文件引用到另一个文件

带有 Iris-Go 框架的 Golang ReverseProxy

c# - 命令输入绑定(bind)有效,但快捷方式未显示在菜单项中

python - 这两个 python for 循环是一回事吗?

php - 使用 Zend Framework 创建 cronjob

mysql - 从 sphinx db 到有点复杂的 golang 结构的最佳实践

go - 在 go 中读取 cookie 的最短、准确且跨浏览器兼容的方法是什么?

linux - 以 super 用户身份执行字符串命令

PHP cli 命令行 safe_mode 限制

linux - 如何通过 linux 命令行将复杂的代码插入到文件中?