如何使用带有许多参数的 exec.Command 正确地“构建”?

我正在尝试使用 exec.Command 编译一个 go 包。我成功地将参数设置为“go”和“build”,如下所示:


package main


import (

    "fmt"

    "log"

    "os/exec"

)


func main() {

    out, err := exec.Command("go", "build").Output()

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println(out)

}

但是,在尝试使用更多参数执行“构建”时,我似乎做错了什么?这是我的代码的样子:


package main


import (

    "fmt"

    "log"

    "os/exec"

)


func main() {

    out, err := exec.Command("set", "GOOS=js&&", "set", "GOARCH=wasm&&", "go", "build", "-o", "C:/Users/Daniel/Desktop/go-workspace/src/sandbox/other/wasm/assets/json.wasm", "kard").Output()

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println(out)

}

输出是exec: "set": executable file not found in %PATH%


我在命令行中为此执行的正常命令是set GOOS=js&& set GOARCH=wasm&& go build -o C:\Users\Daniel\Desktop\go-workspace\src\sandbox\other\wasm\assets\json.wasm kard.


我假设我对使用 exec.Command 有一些误解?我真的很感谢任何支持。


青春有我
浏览 161回答 1
1回答

浮云间

该应用程序使用 shell 语法设置环境变量,但 exec 包不使用 shell(除非您正在运行的命令是 shell)。使用命令环境为执行的命令指定环境变量。通常go build不会写入 stdout,但它会将错误写入 stderr。使用 CombinedOutput 而不是 Output 可以轻松捕获错误文本。cmd := exec.Command("go", "build", "-o", "C:/Users/Daniel/Desktop/go-workspace/src/sandbox/other/wasm/assets/json.wasm", "kard")cmd.Env = []string{"GOOS=js", "GOARCH=wasm"}out, err := cmd.CombinedOutput()if err != nil {    fmt.Printf("%v: %s\n", err, out)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go