首页 > 文章列表 > Golang - flag.Arg(0) 返回 exec.cmd 参数索引为 1 而非 0

Golang - flag.Arg(0) 返回 exec.cmd 参数索引为 1 而非 0

379 2024-02-22
问题内容

我目前的 bar 应用程序中有一些看起来像这样的内容

flag.parse()
str := flag.arg(0)
fmt.println(str)

现在在我的 foo 应用程序中我有这样的东西

var stdout, stderr bytes.Buffer
    cmd := exec.Cmd{
        Path:   c.Path,
        Args:   c.Args,
        Env:    c.Env,
        Stdin:  bytes.NewReader(b),
        Stdout: &stdout,
        Stderr: &stderr,
    }

    if err := cmd.Start(); err != nil {
        return err
    }

现在上面的c.args = [1,2,3]

foo 程序尝试调用 bar 程序,bar 显示 2 如何让栏显示 1。

我知道 flag.parse 忽略第一个参数。如何使用 flag.arg() 读取第一个参数(索引 0)


正确答案


cmd.args 包含命令名称。 flag.arg(0) 是命令名称和标志之后的第一个参数。

通过将命令名称添加到 cmd.args 来修复。

cmd := exec.Cmd{
    Path:   c.Path,
    Args:   append([]string{c.Path}, c.Args...),
    Env:    c.Env,
    Stdin:  bytes.NewReader(b),
    Stdout: &stdout,
    Stderr: &stderr,
}