本文主要介绍了golang代码中调用Linux命令linux启动盘制作工具,文中通过示例代码介绍的十分详尽linux下如何用c语言调用shell命令,对你们的学习或则工作具有一定的参考学习价值
传统方案--crontab
分布式任务调度
go执行shell命令
实际我们在golang代码中调用Linux命令

1、普通调用
package mainimport ("fmt""os/exec")var (output []byteerr error)func main() {// 要执行的命令cmd := exec.Command("bash.exe", "-c", "echo 111")// CombinedOutput-->捕获异常跟命令输出的内容if output, err = cmd.CombinedOutput(); err != nil {fmt.Println("error is :", err)return}// 打印输出结果fmt.Println(string(output))}

2、结合解释器调用linux下如何用c语言调用shell命令linux操作系统培训,可控制中断调用
package mainimport ("context""fmt""os/exec""time")// 接收子协程的数据,协程之间用chan通信type result struct {output []byteerr error}func main() {// 执行一个cmd,让他在一个携程里面执行2s,// 1s的时候 杀死cmdvar (ctx context.ContextcancelFunc context.CancelFunccmd *exec.CmdresultChan chan *resultres *result)// 创建一个结果队列resultChan = make(chan *result, 1000)/*1. WithCancel()函数接受一个 Context 并返回其子Context和取消函数cancel2. 新创建协程中传入子Context做参数,且需监控子Context的Done通道,若收到消息,则退出3. 需要新协程结束时,在外面调用 cancel 函数,即会往子Context的Done通道发送消息4. 注意:当 父Context的 Done() 关闭的时候,子 ctx 的 Done() 也会被关闭*/ctx, cancelFunc = context.WithCancel(context.TODO())// 起一个协程go func() {var (output []byteerr error)// 生成命令cmd = exec.CommandContext(ctx, "bash", "-c", "sleep 3;echo hello;")// 执行命令cmd.CombinedOutput(),且捕获输出output, err = cmd.CombinedOutput()// 用chan跟主携程通信,把任务输出结果传给main协程resultChan <- &result{err: err,output: output,}}()// Sleep 1stime.Sleep(time.Second * 1)// 取消上下文,取消子进程,子进程就会被干掉cancelFunc()// 从子协程中取出数据res = <-resultChan// 打印子协程中取出数据fmt.Println(res.err)fmt.Println(string(res.output))}

到此这篇关于golang代码中调用Linux命令的文章就介绍到这了
程序员技术交流群

扫码进群记得备注:城市、昵称和技术方向。

