golang 学习笔记 使用cmd
package main import (
"bytes"
"fmt" "os/exec"
) func main() {
cmd0 := exec.Command("go", "env")
var outputBuf1 bytes.Buffer
cmd0.Stdout = &outputBuf1
if err := cmd0.Start(); err != nil {
fmt.Printf("Error: The first command can not be startup %s\n", err)
return
}
if err := cmd0.Wait(); err != nil {
fmt.Printf("Error: Couldn't wait for the second command: %s\n", err)
return
}
fmt.Printf("%s\n", outputBuf1.Bytes()) }
package main import "fmt"
import "os/exec" func main() {
//create cmd
cmd_go_env := exec.Command("go", "env")
//cmd_grep:=exec.Command("grep","GOROOT") stdout_env, env_error := cmd_go_env.StdoutPipe()
if env_error != nil {
fmt.Println("Error happened about standard output pipe ", env_error)
return
} //env_error := cmd_go_env.Start()
if env_error := cmd_go_env.Start(); env_error != nil {
fmt.Println("Error happened in execution ", env_error)
return
} a1 := make([]byte, 1024)
n, err := stdout_env.Read(a1)
if err != nil {
fmt.Println("Error happened in reading from stdout", err)
} fmt.Printf("Standard output of go env command: %s", a1[:n])
}
管道连接
通过调用exec.Start启动一个进程,通过StdoutPipe将此调用的输出管道也创建了出来,在这里,我们读取了此输出的信息,确实是go env命令的标准输出,接下来要做的事情就是将此输出的管道与grep命令的进程进行连接了。我们将上面的代码进一步充实:
package main import "fmt"
import "os/exec"
import "bufio"
import "bytes" func main() {
//create cmd
cmd_go_env := exec.Command("go", "env")
cmd_grep := exec.Command("grep", "GOROOT") stdout_env, env_error := cmd_go_env.StdoutPipe()
if env_error != nil {
fmt.Println("Error happened about standard output pipe ", env_error)
return
} //env_error := cmd_go_env.Start()
if env_error := cmd_go_env.Start(); env_error != nil {
fmt.Println("Error happened in execution ", env_error)
return
}
/*
a1 := make([]byte, 1024)
n, err := stdout_env.Read(a1)
if err != nil {
fmt.Println("Error happened in reading from stdout", err)
return
} fmt.Printf("Standard output of go env command: %s", a1[:n])
*/
//get the output of go env
stdout_buf_grep := bufio.NewReader(stdout_env) //create input pipe for grep command
stdin_grep, grep_error := cmd_grep.StdinPipe()
if grep_error != nil {
fmt.Println("Error happened about standard input pipe ", grep_error)
return
} //connect the two pipes together
stdout_buf_grep.WriteTo(stdin_grep) //set buffer for reading
var buf_result bytes.Buffer
cmd_grep.Stdout = &buf_result //grep_error := cmd_grep.Start()
if grep_error := cmd_grep.Start(); grep_error != nil {
fmt.Println("Error happened in execution ", grep_error)
return
} err := stdin_grep.Close()
if err != nil {
fmt.Println("Error happened in closing pipe", err)
return
} //make sure all the infor in the buffer could be read
if err := cmd_grep.Wait(); err != nil {
fmt.Println("Error happened in Wait process")
return
}
fmt.Println(buf_result.String()) }
golang 学习笔记 使用cmd的更多相关文章
- golang学习笔记19 用Golang实现以太坊代币转账
golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...
- golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题
golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...
- golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...
- golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍
golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- golang学习笔记14 golang substring 截取字符串
golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...
- golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换
golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...
- golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题
golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题 今天测试了重新建一个项目生成新的表,然后复制到旧的项目 ...
- golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好
golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好 jetbrain家的全套ide都很好用,一定要dark背景风格才装B 从File-->s ...
随机推荐
- Mysql 主从报错:1141
主从同步,从库报错代码:1141 ,错误信息如下: Master_Port: 3306 Connect_Retry: 60 Master_Log_File: binlog.000086 Read_Ma ...
- windows 桌面文件变成.link解决方案
在注册表中右键删除下面这个注册表项: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ln ...
- AtCoder - 4496 G - k-DMC
AtCoder - 4496 G - k-DMC 题目 长度为n的字符串,q次查询,问"DMC"(不要求连续)在字符串中出现的次数,其中D和M的距离不超过k. 错误思路 通过遍历字 ...
- JfreeChart 乱码问题处理
在前面之间加上下面这段代码即可. //创建主题样式 StandardChartTheme standardChartTheme=new StandardChartTheme("CN" ...
- axios之Vue请求初始化数据放在Created还是Mounted?
先分析下生命周期 beforecreated:el 和 data 并未初始化 created:完成了 data 数据的初始化,el没有 beforeMount:完成了 el 和 data 初始化 mo ...
- 字符串format()方法的基本使用
<模板字符串>.format(<逗号分隔的参数>) 其中,模板字符串是一个由字符串和槽组成的字符串,用来控制字符串和变量的显示效果.槽用大括号({})表示,对应format() ...
- phpcms邮箱smtp配置163企业邮测试可用
前面我们给phpcms加了https,但是修改邮箱smtp配置一直提交不了,提示请填写接口地址,格式为:http://www.abc.com,结尾不包含"/",找了一下phpsso ...
- linux 挂载磁盘LVM
最近又有个坑逼任务: 在客户给的三台虚拟机上在安装集群环境,,虚拟机没挂载磁盘 要配置成LV卷:大致理解逻辑之后理解为:LV卷后续方便做扩容 理论参考:https://www.cnblogs.com/ ...
- es6 中的模块导入与nodejs 中模块的导入的异同!
我们知道es6 的模块导入导出是通过import 和 export 来实现,而nodejs的模块导入导出是通过require 和module.exports 来实现,那么它们有什么异同吗? 请看如下: ...
- R程序书写规范
suppressMessages(library(xxx)) # 导入所需的R包 suppressMessages(library(xxx)) # 导入所需的R包 fucntion02 <- f ...