2015-09-06 29 views
1

我一直在試圖運行一個命令並解析golang中的輸出。這裏是什麼,我試圖做一個樣本:如何將標誌傳遞給lang中的命令?

包主現在

import (
     "fmt" 
    "os/exec" 
) 

func main() { 
    out,err := exec.Command("ls -ltr").Output() 
     if err != nil { 
       fmt.Println("Error: %s", err) 
     } 
    fmt.Printf("%s",out) 
} 

,當我試圖運行「LS -ltr」,我得到這個錯誤:

Error: %s exec: "ls -ltr": executable file not found in $PATH 

因此,基本上是在PATH中尋找整個「ls -ltr」。這顯然不在那裏。有什麼辦法可以通過任何爭論的標誌?TIA。

回答

6

您通過傳遞更多的參數給函數傳遞參數給程序 - 它的可變參數:

out,err := exec.Command("ls","-ltr").Output() 

https://golang.org/pkg/os/exec/#Command

這是EXEC風格的功能,您將在最見一個很常見的約定語言。另一種常見模式是建設者。


有時候你需要傳遞不會在編譯時已知的參數佈局(雖然它不是任意命令發送到系統是一個好主意 - !注意安全)。如果你想傳遞未知數量的參數,你可以使用一個特殊語法的數組:

// Populate myArguments however you like 
myArguments := []string{"bar","baz"} 

// Pass myArguments with "..." to use variadic behaviour 
out,err := exec.Command("foo", myArguments...).Output() 
+0

非常感謝,很有效! – Pensu

相關問題