Golang os/exec 使用方法(筆記)
此筆記是一個簡單純粹的快速參考目錄,方便我(或是你?)在開發時使用 os/exec 之用。如需要詳細的教學或 API 資料,請直接參閱 https://golang.org/pkg/os/exec/ 此文中有部分例子參考自: https://colobu.com/2017/06/19/advanced-command-execution-in-Go-with-os-exec/ 執行指令並回傳結果 func main() { cmd := exec.Command("ls", "-lah") out, err := cmd.CombinedOutput() if err != nil { log.Fatalf("cmd.Run() failed with %s\n", err) } fmt.Printf("combined out:\n%s\n", string(out)) } 加入額外的環境參數再執行指令 cmd := exec.Command("programToExecute") additionalEnv := "FOO=bar" newEnv := append(os.Environ(), additionalEnv)) cmd.Env = newEnv out, err := cmd.CombinedOutput() if err != nil { log.Fatalf("cmd.Run() failed with %s\n", err) } fmt.Printf("%s", out) 指定 CWD 並執行指令 cmd:= exec.Command("git", "log") cmd.Dir = "your/intended/working/directory" out, err := cmd.Output() 注意:使用上術的方式時請確保相關的指令存在於 ENV 參數內(或 Windows 的 %PATH%),如果不是,請使用 binary 的 Absolute Path,例如: abspath, _ := filepath.Abs("./mybinary") cmd:= exec.Command(abspath, "log") cmd.Dir = "your/intended/working/directory" out, err := cmd.Output() 在 Linux 下使用 os/exec + Pipe 或 Bash 運算式 rcmd := `iw dev | awk '$1=="Interface"{print $2}'` cmd := exec.Command("bash", "-c", rcmd) out, err := cmd.CombinedOutput() if err != nil { log.Println(err.Error()) } log.Println(string(out)) 在 Windows 下使用 os/exec + Batch 運算式 cmd := exec.Command("cmd", "/c", "ffmpeg -i myfile.mp4 myfile.mp3 && del myfile.mp4") out, err := cmd.CombinedOutput() if err != nil { log.Println(err.Error()) } log.Println(string(out)) 使用 String Slice 為指令傳進 os/exec args := []string{"hello", "world"} cmd := exec.Command("echo", args...)…