运行外部命令后“退出状态2”

问题描述 投票:0回答:1

以下answer,下面是运行外部命令的代码:

package main

import (
    "bytes"
    "log"
    "os/exec"
)

func main() {
    path, err := exec.LookPath("ls")
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("pwd can be found at path: %s \n", path)

    cmd := exec.Command(path, " -l .")
    var out bytes.Buffer
    cmd.Stdout = &out

    err = cmd.Run()
    if err != nil {
        log.Println("after running external command: ", err)
    }

    log.Println("buffer output:", out.String())
}

以下是输出:

2023/10/22 10:45:03 ls can be found at path: /usr/bin/ls 
2023/10/22 10:45:03 after running external command:  exit status 2
2023/10/22 10:45:03 buffer output: 

如何使用

exec
包运行外部命令?

go ls
1个回答
1
投票

几个问题:

  • exec.Command(path, " -l .")
    中,参数应该是单独的字符串,而不是单个字符串。
  • (nit)
    ls
    命令路径被记录为“pwd”,这与您在问题中提到的输出不一致。

试试这个:

package main

import (
    "bytes"
    "log"
    "os/exec"
)

func main() {
    path, err := exec.LookPath("ls")
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("ls can be found at path: %s \n", path)

    cmd := exec.Command(path, "-l", ".")
    var out bytes.Buffer
    cmd.Stdout = &out

    err = cmd.Run()
    if err != nil {
        log.Println("after running external command: ", err)
    }

    log.Println("buffer output:", out.String())
}
© www.soinside.com 2019 - 2024. All rights reserved.