当前位置:首页 > 尘凡 > 正文内容

go持续获取命令或程序返回值

满纸空言3年前 (2022-01-19)尘凡12030

获取njmon每3秒返回一次的结果,可以用回调进行结果处理

package main

import (
	"bufio"
	"log"
	"os/exec"
)

func main() {

	Exec("./njmon", "-s", "3", "-c", "1000")

}

func Exec(name string, args ...string) error {
	cmd := exec.Command(name, args...)
	stderr, _ := cmd.StderrPipe()
	stdout, _ := cmd.StdoutPipe()
	if err := cmd.Start(); err != nil {
		log.Println("exec the cmd ", name, " failed")
		return err
	}
	// 正常
	outScan := bufio.NewScanner(stdout)
	go func() {
		for outScan.Scan() {
			log.Println(outScan.Text())
		}
	}()
	errScan := bufio.NewScanner(stderr)
	for errScan.Scan() {
		s := errScan.Text()
		log.Println(s)
	}
	// 等待命令执行完
	cmd.Wait()
	return nil
}

 

以下参考:https://www.jb51.net/article/174623.htm

func Exec(name string, args ...string) error {
 cmd := exec.Command(name, args...)
 stderr, _ := cmd.StderrPipe()
 stdout, _ := cmd.StdoutPipe()
 if err := cmd.Start(); err != nil {
 log.Println("exec the cmd ", name, " failed")
 return err
 }
 // 正常日志
 logScan := bufio.NewScanner(stdout)
 go func() {
 for logScan.Scan() {
  log.Println(logScan.Text())
 }
 }()
 // 错误日志
 errBuf := bytes.NewBufferString("")
 scan := bufio.NewScanner(stderr)
 for scan.Scan() {
 s := scan.Text()
 log.Println("build error: ", s)
 errBuf.WriteString(s)
 errBuf.WriteString("\n")
 }
 // 等待命令执行完
 cmd.Wait()
 if !cmd.ProcessState.Success() {
 // 执行失败,返回错误信息
 return errors.New(errBuf.String())
 }
 return nil
}

 

扫描二维码推送至手机访问。

版权声明:本文由满纸空言发布,如需转载请注明出处。

本文链接:https://mzky.cc/post/81.html

分享给朋友:

“go持续获取命令或程序返回值” 的相关文章

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。