執行外部指令
我將 Go 執行外部指令分為三個階段:
設定主要指令
使用下面兩個function 設定主要指令
exec.Command
: 一個指令名稱與多個參數exec.CommandContext
: 類似上面,但開頭帶入一個 context
// 執行一個指令,把輸入的小寫英文改為大寫英文書出
cmd := exec.Command("tr", "a-z", "A-Z")
設定其他細節
這個階段可以設定所有周邊該做的事情
- cmd.Output : 取得執行的standard output。
- cmd.Input : 設定輸入執行的standard input。
- cmd.CombinedOutput: 取得執行的 standard output & standard error 合併的結果。
- cmd.Environ : 取得執行環境當下的環境變數,搭配
cmd.Env = append(cmd.Environ(), “POSIXLY_CORRECT=1”)
可增加環境變數。 - cmd.StderrPipe: 回傳一個pipe 連到執行的standard error。
- cmd.StdinPipe: 回傳一個pipe 連到執行的standard input。
- cmd.StdoutPipe: 回傳一個pipe 連到執行的standard output。
cmd.Stdin = strings.NewReader("some input")
var out strings.Builder
cmd.Stdout = &out
執行
- cmd.Run() : 執行且等待其完畢
- cmd.Start(): 執行但不等待其完畢,若突然又想等了,使用
cmd.Wait()
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
其他
os.exec 不會像有些語言幫忙先呼叫 shell 。