golang 在golang中获取shell命令的实时输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 在golang中获取shell命令的实时输出相关的知识,希望对你有一定的参考价值。

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"os/exec"
	"strings"
)

func main() {
	cmdName := "ping 127.0.0.1"
	cmdArgs := strings.Fields(cmdName)

	cmd := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
	stdout, _ := cmd.StdoutPipe()
	cmd.Start()
	oneByte := make([]byte, 100)
	num := 1
	for {
		_, err := stdout.Read(oneByte)
		if err != nil {
			fmt.Printf(err.Error())
			break
		}
		r := bufio.NewReader(stdout)
		line, _, _ := r.ReadLine()
		fmt.Println(string(line))
		num = num + 1
		if num > 3 {
			os.Exit(0)
		}
	}

	cmd.Wait()
}

golang中调用c的正确姿势

参考技术A 工程结构如上图所示,我们需要实现的目标是在go文件中调用c文件

foo.c如下:

foo.go如下

foo.h如下:

编译过程如下:
1、先将c文件编译为.o文件,然后生成动态链接库.dylib文件
(1) clang -c foo.c
(2 clang -shared foo.o -o libfoo.dylib
2、在上述的动态链接库生成之后,在foo.go中添加动态链接命令:#cgo LDFLAGS: -L./ -lfoo

需要注意的是

中间不能有空格

以上是关于golang 在golang中获取shell命令的实时输出的主要内容,如果未能解决你的问题,请参考以下文章

golang 在后台执行shell命令,在单独的go例程中运行

003-golang 调用外部命令

golang调用shell命令标准输出阻塞管道

Golang Linux Shell编程

golang获取命令行参数

golang爬坑:操作Linux命令