golang利用C语言调用脚本实现

问题:

在使用golang自带的调用命令时,不知道你们是否有遇到执行脚本已经完成,但是程序还在一直等待。

如果没有你不妨试一下在脚本中添加一个脚本,比如在 a.sh 中在执行b.sh 。这个时候你就会发现程序退不出来;当然不只是脚本中执行脚本的问题,还有在脚本中执行某些命令也会出现这样的问题。

为了方便使用,比如某些项目中的脚本太多,或者在不同的文件夹项目有相同的脚本,我们不妨把脚本都提出来,使用golang 写一个程序来调用这些脚本。

我们先说一下C语言调用脚本或者命令的方式:system() 就是调用的函数;

#include<stdlib.h>

int  execCmd(char* name)
{
	return system(name);
}

在golang中实现这个功能非常的简单:

package utils
/*
#include<stdlib.h>

int  execCmd(char* name)
{
	return system(name);
}
*/
import "C"
import (
	"fmt"
	"unsafe"
)

func ExecCmd(name string,args ...string) error {
	arg := ""
	for _, s := range args {
		arg += s +" "
	}

	cmd := C.CString(name + " " + arg)
	defer C.free(unsafe.Pointer(cmd))

	code := C.execCmd(cmd)
	if code != 0 {
		return fmt.Errorf("exec cmd failed , %v",cmd)
	}
	return nil
}

name : 调用的脚本或者命令;

args: 调用时传入的参数。

 

ExecCmd () 方法的具体实现可以自行研究。

使用方法如下:

err := utils.ExecCmd("ls", "-l")
	if err != nil {
		fmt.Println(err)
}

err := utils.ExecCmd("./test.sh")
	if err != nil {
		fmt.Println(err)
}

err := utils.ExecCmd("./test.sh", "1","2","3")
	if err != nil {
		fmt.Println(err)
}

到此结束,当然这使用的是C语言,所以需要在有C的环境中才能使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值