【问题标题】:exec.Run and argv problemexec.Run 和 argv 问题
【发布时间】:2010-03-20 00:01:53
【问题描述】:

我想创建一个 exec.Cmd 数组并将它们通过管道连接在一起以创建一个 squid 身份验证器。它在 file 中的命令没有参数时起作用。带参数时,它只读取 EOF。我检查了 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

【问题讨论】:

    标签: go


    【解决方案1】:

    args 还需要包含 arg0。试试 exec.Run(parts[0], parts)

    我提出了一个关于这令人困惑的问题,但他们声称它按预期工作: http://code.google.com/p/go/issues/detail?id=428

    【讨论】:

    • 现在这是丑陋的 API 设计。使用关键字参数,他们可以模仿更好的子流程:docs.python.org/library/subprocess.html#subprocess.Popen
    • 这很难看,因为他们或多或少地复制了标准 C 库功能的行为,这也是他们声称它按预期工作的原因。事实上,他们可能只是在后台调用 C 函数“exec”的众多变体之一。
    猜你喜欢
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2015-01-10
    • 2019-04-11
    相关资源
    最近更新 更多