【Go】Go语言执行linux命令行
CrazyPanda发表于:2024-02-26 23:01:20浏览:377次
package main /* Golang语言执行linux命令行 */ import ( "fmt" "io/ioutil" "os/exec" "time" ) func run() { cmd := exec.Command("/bin/bash", "-c", "ping 127.0.0.1") // 命令的输出直接扔掉 _, err := cmd.Output() // 命令出错 if err != nil { panic(err.Error()) } // 命令启动和启动时出错 if err := cmd.Start(); err != nil { panic(err.Error()) } // 等待结束 if err := cmd.Wait(); err != nil { panic(err.Error()) } } func main() { // 异步线程 go run() fmt.Println(time.Now().Format("2006.01.02 15:04:05")) // 等待1秒 time.Sleep(1e9) cmd := exec.Command("/bin/bash", "-c", `ps -ef | grep -v "grep" | grep "ping"`) // 接收命令的标准输出 stdout, err := cmd.StdoutPipe() if err != nil { fmt.Println("StdoutPipe: " + err.Error()) return } // 接受命令的标准错误 stderr, err := cmd.StderrPipe() if err != nil { fmt.Println("StderrPipe: ", err.Error()) return } // 启动 if err := cmd.Start(); err != nil { fmt.Println("Start: ", err.Error()) return } // 读取错误信息 bytesErr, err := ioutil.ReadAll(stderr) if err != nil { fmt.Println("ReadAll stderr: ", err.Error()) return } if len(bytesErr) != 0 { fmt.Printf("stderr is not nil: %s", bytesErr) return } // 读取输出 bytes, err := ioutil.ReadAll(stdout) if err != nil { fmt.Println("ReadAll stdout: ", err.Error()) return } // 等等命令执行完成 if err := cmd.Wait(); err != nil { fmt.Println("Wait: ", err.Error()) return } // 打印输出 fmt.Printf("stdout: %s", bytes) // 等待主程序退出,携程退出. time.Sleep(1e9 * 10) } // 运行命令: go run main.go
注明
cmd.Output() 会自带启动start并等程序执行完成把b,err返回,在此之前阻塞下面的指令。
cmd.Start() 启动而不阻塞。
cmd.Wart() 需要和Start配合,cmd返回前阻塞。
package main import ( "fmt" "os/exec" ) func main() { c := exec.Command("/bin/bash", "-c", "vmstat 1 5") fmt.Printf("our==> %s", "000\n") // _, err := c.Output() // if err != nil { // fmt.Println("err==> ", err) // return // } fmt.Printf("our==> %s", "111\n") c.Start() fmt.Printf("our==> %s", "222\n") c.Wait() fmt.Printf("our==> %s", "333\n") }
注明:
cmd.StdoutPipe() 使用也不能实时拿到cmd输出
cmd.StderrPipe() 使用也不能实时拿到cmd输出
package main import ( "fmt" "io/ioutil" "os/exec" ) func main() { c := exec.Command("/bin/bash", "-c", "vmstat 1 5") fmt.Printf("out==> %s", "000\n") stdout, _ := c.StdoutPipe() stderr, _ := c.StderrPipe() c.Start() b1, _ := ioutil.ReadAll(stdout) //只有这个有输出. 且是5秒后。 b2, _ := ioutil.ReadAll(stderr) fmt.Printf("1out==> %s", b1) fmt.Printf("2err==> %s", b2) c.Wait() b1, _ = ioutil.ReadAll(stdout) b2, _ = ioutil.ReadAll(stderr) fmt.Printf("3out==> %s", b1) fmt.Printf("4err==> %s", b2) }
猜你喜欢
- 【Go】Gotk3简介
- 在软件开发的世界里,GUI(图形用户界面)工具包是创造美观且交互性良好的应用的关键组件。Gotk3是一个强大的开源项目,它将流行的GTK+3库与Go语言无缝结合,为Go开发者提供了一个高效、跨平台的GUI构建框架。如果你正在寻找一种简单的方式来构建桌面应用,那么Gotk3值得你的关注。GO-TKGo-Tk是Go编程语言的一款图形用户接口(GUI)框架。它具有简洁的语法、可移植性好、跨平台性强等特点,适用于各种场景的GUI开发。Go-Tk由两部分组成,即类似tkinter的控件封装和底层的C语言绑
- 【Go】Golang打包go项目部署到linux服务器正确方法
- 网上方法正确方法总结 网上方法我们可以在终端中输入以下代码:set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 go build -o main-linux main.go然后就会生成main-linux的二进制可执行文件,然后我们就可以将main-linux放到服务器中的任一目录中,然后我们就可以执行以下命令运行。> chmod 777&nb
- 【Go】Go语言执行linux命令行
- ackage main /* Golang语言执行linux命令行 */ import ( "fmt" "io/ioutil" "os/exec" "time" ) func run() { cmd := exec.Command("/bin/bash", "-c",&n
- 【Go】Go的数据挖掘与机器学习框架
- 1.背景介绍Go是一种现代的、高性能的、静态类型的编程语言,它由Google开发并于2009年发布。Go语言的设计目标是简单、可靠和高性能。Go语言的特点是简单的语法、强大的标准库、垃圾回收、并发处理等。Go语言的发展非常快速,已经被广泛应用于云计算、大数据、机器学习等领域。在大数据和机器学习领域,Go语言的优势在于其高性能、并发处理能力和简单易用的语法。Go语言的标准库提供了丰富的数据处理和并发处理功能,这使得Go语言成为处理大量数据和实时处理数据的理想语言。在本文中,我们将讨论Go语言在数据
- 【Go】go依赖注入库samber/do使用
- 介绍以简单和高效而闻名的Go语言在其1.18版本中引入了泛型,这可以显着减少大量代码生成的需要,使该语言更加强大和灵活。如果您有兴趣, Go 泛型教程 是很好的学习资源。通过使用 Go 的泛型,samber/do库为依赖注入 (DI) 提供了一个很好的解决方案。依赖注入是一种重要的设计模式,它促进对象及其依赖关系之间的松散耦合,从而提高代码模块化性、可测试性和可维护性。泛型和依赖注入的结合进一步提升了 Go 在创建高效、可扩展软件方面的潜力。在本文中,您将学习如何使用 samber/do 提供依
- 【Go】Go语言的特点和优势
- Go语言是一种开源的编程语言,它在2009年由Google开发并在2012年正式发布。Go语言的主要设计目标是提供一种简单有效的方法来构建简单、可靠、高效的软件。 Go语言的主要特点和优势包括: 静态类型:Go语言是一种静态类型的语言,这意味着所有变量在编译时就必须确定其数据类型。 自动垃圾回收:Go语言具有自动的垃圾回收机制,这意味着开发者不需要手动管理内存。 并行进程:Go语言支持并行进程,这使得开发者可以利用多核处理器的优势来编写并发程序。&nbs
- 【Go】Golang为什么成为程序员的首选
- 在当今快速发展的科技时代,程序员这一职业已经成为越来越受人们青睐的职业选择。而在众多编程语言中,Go语言由于其简洁、高效、并发能力强等优势,逐渐成为许多程序员的首选。本文将探讨为什么越来越多的程序员将Go语言作为他们的首选,通过具体的代码示例展示Go语言的强大之处。一、Go语言简洁高效Go语言由Google开发,设计初衷是为了解决大型项目的工程问题,因此在语法设计上追求简洁高效。代码量少,结构清晰,易于阅读和维护。下面是一个简单的Hello World示例:package main &
- 【Go】Go语言变量的声明
- 文章目录前言:基本类型:变量的命名规范:变量的声明总结:强烈推荐专栏集锦写在最后1.声明单个变量:2.声明多个变量:3.批量声明变量:4.声明并初始化变量:5.声明多个变量并初始化:6.简短语法赋值:一般语法:简短语法:举例:前言:在Go语言中,变量的声明是编写程序时的基础之一。使用 var 关键字可以定义单个或多个变量,并且可以选择是否初始化这些变量。Go语言的静态类型系统要求在声明变量时指定变量的类型,但也提供了类型推断功能,使得在某些情况下可以省略类型声明。本文将介绍如何使用 var 关键
栏目分类全部>
推荐文章
- 【Python】pandas数据分析技巧全面解析:从初学到专家
- 【PHP】PHP8.1 Fiber交叉执行多任务
- 【Python】Pandas轻松读取SQL数据库中的数据
- 【前端】微信小程序推送订阅消息
- 【PHP】使用intervention/image给图片添加文字和图片
- 【VUE】Vue3+Vite+TypeScript常用项目模块详解
- 【C#】C# Winfrom 常用功能整合-1
- 【Vue】vue3+node+Element-Ui+spark-md5实现大文件上传、断点续传、秒传、多大文件上传
- 【PHP】微信支付v3的jsapi接口接入thinkphp6完整流程
- 【C#】Winform NanUI 0.77版本 读取嵌入式资源