运行命令并使输出在线

运行命令并使输出在线,第1张

运行命令并使输出在线

使用此答案中提供的解决方案:流命令输出进度

cmdParams := [][]string{    {filepath.Join(dir, path), "npm", "install"},    {filepath.Join(pdir, n.path), "gulp"},}for _, cp := range cmdParams {    log.Printf("Starting %s in folder %s...", cp[1:], cp[0])    cmd := exec.Command(cp[1], cp[2:]...)    cmd.Dir = cp[0]    stdout, err := cmd.StdoutPipe()    if err != nil {        log.Printf("%s cmd.StdoutPipe() error: %vn", cp[1:], err)        return    }    // Start command:    if err = cmd.Start(); err != nil {        log.Printf("%s start error: %vn", cp[1:], err)        return    }    // Stream command output:    scanner := bufio.NewScanner(stdout)    scanner.Split(bufio.ScanRunes)    for scanner.Scan() {        fmt.Print(scanner.Text())    }    if scanner.Err() != nil {        log.Printf("Reading %s stdout error: %vn", cp[1:], err)        return    }    // Get execution success or failure:    if err = cmd.Wait(); err != nil {        log.Printf("Error running %s: %vn", cp[1:], err)        return    }    log.Printf("Finished %s", cp[1:])}

一些解释:

这行:

scanner := bufio.NewScanner(stdout)

创建一个

bufio.Scanner
将从提供该进程写入的输出的管道读取的。

这行:

scanner.Split(bufio.ScanRunes)

指示扫描程序以

rune
s代替默认行来读取输入。

请注意,上面的示例仅流式处理标准输出。如果您还需要标准错误流,也可以从阅读

Command.StderrPipe()

还要注意,这不适用于某些命令不能将所有内容写入其标准输出或错误的命令。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5499315.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存