Sometimes our Go programs need to spawn other, non-Go process. For example, the syntax highlighting on this site is implemented by spawning a pygmentize process from a Go program. Let‘s look at a few examples of spawning processes from Go
package main import ( "fmt" "io/ioutil" "os/exec" ) func main() { dateCmd := exec.Command("date") dateOut, err := dateCmd.Output() if err != nil { panic(err) } fmt.Println("> date") fmt.Println(string(dateOut)) grepCmd := exec.Command("grep", "hello") grepIn, _ := grepCmd.StdinPipe() grepOut, _ := grepCmd.StdoutPipe() grepCmd.Start() grepIn.Write([]byte("hello grep\ngoodbye grep")) grepIn.Close() grepBytes, _ := ioutil.ReadAll(grepOut) grepCmd.Wait() fmt.Println("> grep hello") fmt.Println(string(grepBytes)) lsCmd := exec.Command("bash", "-c", "ls -a -l -h") lsOut, err := lsCmd.Output() if err != nil { panic(err) } fmt.Println("> ls -a -l -h") fmt.Println(string(lsOut)) }
> date Wed Apr 1 13:15:32 CST 2015 > grep hello hello grep > ls -a -l -h total 3648 drwxr-xr-x 16 xjk staff 544B Apr 1 13:09 . drwxr-xr-x+ 30 xjk staff 1.0K Mar 6 14:00 .. [email protected] 1 xjk staff 6.0K Mar 27 11:21 .DS_Store -rw-r--r-- 1 xjk staff 838B Mar 30 13:38 Reading.go -rw-r--r-- 1 xjk staff 553B Mar 27 13:12 URL.go -rw-r--r-- 1 xjk staff 598B Mar 30 13:45 Writing.go -rw-r--r-- 1 xjk staff 402B Mar 30 13:23 base64.go -rw-r--r-- 1 xjk staff 447B Mar 31 13:28 commandLineFlags.go -rwxr-xr-x 1 xjk staff 1.7M Mar 31 13:21 commonLineArgument -rw-r--r-- 1 xjk staff 209B Mar 31 13:20 commonLineArgument.go -rw-r--r-- 1 xjk staff 261B Apr 1 13:02 environmentVariables.go -rw-r--r-- 1 xjk staff 298B Mar 31 13:15 lineFilters.go -rw-r--r-- 1 xjk staff 384B Mar 27 13:04 number_parsing.go -rw-r--r-- 1 xjk staff 189B Mar 27 13:18 sha.go -rw-r--r-- 1 xjk staff 720B Apr 1 13:15 spawningProcess.go -rwxr-xr-x 1 xjk staff 243B Mar 27 11:25 urllib001.p
总结 :
1 : ...
时间: 2024-10-18 21:09:38