go - exec.Run 和 argv 问题

标签 go

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

最佳答案

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

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

关于go - exec.Run 和 argv 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2148190/

相关文章:

去 1.10 : cannot implicitly include runtime/cgo in a shared library

映射并发访问

go - 格式错误的模块路径...第一个路径元素中缺少点

go - 方法调用与 channel 的使用

go - go.mod上的严格版本

去例程: does select really pick a random case?

reactjs - 如何使用 Go 提供动态创建的 URL 路径?

go - 从 io.Reader 创建一个 io.ReaderAt

go - 在 Go 中的多个位置收听一个 channel

go - 编译grpc时未定义: grpc. ClientConnInterface