当前位置: > > > > 运行 os.execute 获取输出
来源:stackoverflow
2024-04-26 14:39:37
0浏览
收藏
欢迎各位小伙伴来到,相聚于此都是缘哈哈哈!今天我给大家带来《运行 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的相关知识,也可关注公众号。