2010-01-27 91 views
3

我想創建一個exec.Cmd數組,並將它們組合在一起以構成一個魷魚身份驗證器。它在文件中的命令沒有參數時有效。有了參數,它只能讀取EOF。我檢查過argv數組,它的內容沒問題。exec.Run和argv問題

代碼的相關部分是:

func initCmd(file *os.File) []* exec.Cmd { 
    var cmd  [MAX_PROC]* exec.Cmd; 
    var e  os.Error 

    // Initialize the commands in the config file 
    environ := os.Environ(); 
    var i int 
    for i=0; i < MAX_PROC; i++ { 
     line := getLine(file) 
     if line == "" { break } 
     parts := strings.Fields(line) 
     cmd[i], e = exec.Run(parts[0], parts[1:], environ, 
          exec.Pipe, exec.Pipe, exec.Pipe) 
     exitOnError(&e) 
    } 
    return cmd[0:i] 
} 

任何想法? 謝謝。

PS:如果有幫助,完整的程序源代碼位於github

回答

4

該參數還需要包含arg0。嘗試exec.Run(零件[0],零部件)

我開了大概如何,這是令人困惑的一個問題,但他們聲稱它的工作像預期一樣: http://code.google.com/p/go/issues/detail?id=428

+0

現在,這是醜陋的API設計。有了關鍵字參數,他們可以調整更好的子進程:http://docs.python.org/library/subprocess.html#subprocess.Popen – Tobu 2010-01-27 18:38:08

+0

這很醜陋,因爲它們或多或少複製了標準C庫功能的行爲,也是爲什麼他們聲稱它按預期工作。事實上,他們可能只是在引擎蓋下調用C函數「exec」的衆多變體之一。 – 2010-01-27 21:45:03