duanji9311 2018-11-03 20:27
浏览 475

运行os.execute以获取输出

Im using the following code which run command against binary and need to provide output

if I run the command ftr get apps in the in my mac I got

[app1 apps2]

Now I copy the binary to the test data folder and run the code below and I want to get the apps, currenlty there is no error but Im not getting also the data, what could be missing here?

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

2条回答 默认 最新

  • douxi8759 2018-11-03 20:38
    关注

    You won't directly have an output, since the commands takes some time before it writes in stdout/stderr, so you need to basically wait for something to come out.

    The way you can do it is by using bufio.NewScanner, like this:

    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()
    }
    

    If your command writes on stderr instead of stdout, you might need to use cmd.StderrPipe instead of cmd.Stdoutpipe in order to get the output.

    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度