Go os.exec 執行外部指令

Gary Liao
Jun 8, 2023

--

執行外部指令

我將 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 。

--

--