为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
青春有我 2023-02-21 16:35:02
我正在尝试使用 exec.Command 编译一个 go 包。我成功地将参数设置为“go”和“build”,如下所示:package mainimport (    "fmt"    "log"    "os/exec")func main() {    out, err := exec.Command("go", "build").Output()    if err != nil {        log.Fatal(err)    }    fmt.Println(out)}但是,在尝试使用更多参数执行“构建”时,我似乎做错了什么?这是我的代码的样子:package mainimport (    "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 有一些误解?我真的很感谢任何支持。
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

该应用程序使用 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)

}


查看完整回答
反对 回复 2023-02-21
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号