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 ...
随机推荐
- bokeh 中 ValueError: Unrecognized range input: 解决方法
bokeh_data.index =bokeh_data.index.astype(np.str) 将其转换为字符型
- NI CWGraph 显示波形图
ptrWaveBox.Axes(1).Maximum = 1000 ptrWaveBox.Axes(2).Maximum = 20 ptrWaveBox.Axes(2).Minimum = 0 Dim ...
- cmake设定boost python3
在mac上操作的.python3是anaconda环境下装的,3.7.1. boost是用brew装的,1.71.0版本. 按照FindBoost.cmake官方写法的CMakeLists.txt: ...
- ARM开发板上查看动态库或者可执行程序的依赖关系
以ARM32开发板为例,在/lib下有一个名为ld-linux-armhf.so.3的可执行程序(在ARM64开发板上是/lib/ld-linux-aarch64.so.1),这个程序负责加载可执行程 ...
- debug模式不报错,release模式报错
经常会 char * pMem = new char[icount]; 其中icount为变量,然后对该内存段猛的操作.release编译出来,出现莫名奇妙的错误.但是debug没问题. 后面查了别人 ...
- js数组详解,js数组操作
转自 http://www.cnblogs.com/qiantuwuliang/archive/2011/01/08/1930499.html 1.数组的创建 var arrayObj = new A ...
- (二)STM32开发例程
1控制LED和继电器 除了 PA11和PA12其他都可以 void setup() { pinMode(PC13, OUTPUT); pinMode(PC14, OUTPUT); pinMode(PC ...
- 梅尔倒谱系数特征(Mel-frequency cepstral coefficients,MFCC)
引言 感知实验表明,人耳对于声音信号的感知聚焦于某一特定频率区域内,而非在整个频谱包络中. MFCC特征是应用非常广泛的语音特征. 语音的MFCC特征是基于人耳感知实验得到,将人耳当成特定的滤波器,只 ...
- Educational Codeforces Round 78 (Rated for Div. 2) B - A and B(思维)
- 基于react开发package.json的配置
项目依赖 react网页开发的3件套: react, react-dom, react-router-dom, redux, react-reduxreact的UI组件库: antd(pc端), an ...