我正在使用以下代码对二进制文件运行命令并需要提供输出
如果我在我的 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/