├── README.md ├── .gitignore └── main.go /README.md: -------------------------------------------------------------------------------- 1 | command 2 | ======= 3 | 4 | golang exec command 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files, Static and Dynamic libs (Shared Objects) 2 | *.o 3 | *.a 4 | *.so 5 | 6 | # Folders 7 | _obj 8 | _test 9 | 10 | # Architecture specific extensions/prefixes 11 | *.[568vq] 12 | [568vq].out 13 | 14 | *.cgo1.go 15 | *.cgo2.c 16 | _cgo_defun.c 17 | _cgo_gotypes.go 18 | _cgo_export.* 19 | 20 | _testmain.go 21 | 22 | *.exe 23 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "io/ioutil" 6 | "os/exec" 7 | ) 8 | 9 | func run() { 10 | cmd := exec.Command("/bin/sh", "-c", "ping 127.0.0.1") 11 | _, err := cmd.Output() 12 | if err != nil { 13 | panic(err.Error()) 14 | } 15 | 16 | if err := cmd.Start(); err != nil { 17 | panic(err.Error()) 18 | } 19 | 20 | if err := cmd.Wait(); err != nil { 21 | panic(err.Error()) 22 | } 23 | } 24 | 25 | func main() { 26 | go run() 27 | 28 | cmd := exec.Command("/bin/sh", "-c", `ps -ef | grep -v "grep" | grep "ping"`) 29 | stdout, err := cmd.StdoutPipe() 30 | if err != nil { 31 | fmt.Println("StdoutPipe: " + err.Error()) 32 | return 33 | } 34 | 35 | stderr, err := cmd.StderrPipe() 36 | if err != nil { 37 | fmt.Println("StderrPipe: ", err.Error()) 38 | return 39 | } 40 | 41 | if err := cmd.Start(); err != nil { 42 | fmt.Println("Start: ", err.Error()) 43 | return 44 | } 45 | 46 | bytesErr, err := ioutil.ReadAll(stderr) 47 | if err != nil { 48 | fmt.Println("ReadAll stderr: ", err.Error()) 49 | return 50 | } 51 | 52 | if len(bytesErr) != 0 { 53 | fmt.Printf("stderr is not nil: %s", bytesErr) 54 | return 55 | } 56 | 57 | bytes, err := ioutil.ReadAll(stdout) 58 | if err != nil { 59 | fmt.Println("ReadAll stdout: ", err.Error()) 60 | return 61 | } 62 | 63 | if err := cmd.Wait(); err != nil { 64 | fmt.Println("Wait: ", err.Error()) 65 | return 66 | } 67 | 68 | fmt.Printf("stdout: %s", bytes) 69 | } 70 | --------------------------------------------------------------------------------