zoukankan      html  css  js  c++  java
  • 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
    ", err)
    		return
    	}
    	if err := cmd0.Wait(); err != nil {
    		fmt.Printf("Error: Couldn't wait for the second command: %s
    ", err)
    		return
    	}
    	fmt.Printf("%s
    ", 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())
    
    }
    

      

  • 相关阅读:
    基于统计语言模型的分词方法
    隐马尔可夫模型(五)——隐马尔可夫模型的解码问题(维特比算法)
    6. D3DXMatrixOrthoLH +正交投影矩阵
    4. Triangle
    顶点坐标变换(D3DXMatrixOrthoLH, D3DXMatrixPerspectiveFovLH)
    7. 透视投影矩阵
    8. 世界矩阵使物体移动
    D3D中的世界矩阵,视图矩阵,投影矩阵
    9. 视图矩阵(摄像机)
    5. Quad
  • 原文地址:https://www.cnblogs.com/saryli/p/11642513.html
Copyright © 2011-2022 走看看