我使用以下代码对二进制文件运行命令并需要提供输出
如果我在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)
答案 0 :(得分:2)
您不会直接获得输出,因为命令需要一些时间才能将其写入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
才能获得输出。
答案 1 :(得分:1)
同时调用Start和Output是多余的。
Output运行命令并返回其标准输出。
启动用于异步运行命令。只需删除该呼叫即可:
cmd := exec.Command("ftr", "get", "apps")
cmd.Dir = "./testdata/"
b, err := cmd.Output()
fmt.Println(string(b), err)