這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
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 mainimport ( "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))}
> dateWed Apr 1 13:15:32 CST 2015> grep hellohello grep> ls -a -l -htotal 3648drwxr-xr-x 16 xjk staff 544B Apr 1 13:09 .drwxr-xr-x+ 30 xjk staff 1.0K Mar 6 14:00 ..-rw-r--r--@ 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 : ...