2010-01-27 90 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