带有 bash -c 的 exec.Command 不返回标准输出

执行下面的程序,out是一个空的 type 切片[]uint8。


package main


import (

    "context"

    "log"

    "os/exec"

)


func main() {

    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)

    defer cancel()

    cmd := exec.CommandContext(ctx, "bash", "-c", "python3", "-c", "print('hello')")

    out, _ := cmd.Output()

    log.Println(out)

}

但是,如果我在没有 的情况下运行bash -c,我会得到预期的输出。


这是一个bash -c不需要的简单示例,但在现实世界中,我的应用程序正在调用一个导入多个包的 python 脚本,如果没有bash -c,我会从 python 中得到“找不到模块”错误。


我在这里做错了什么?如何捕获标准输出内容?


长风秋雁
浏览 311回答 1
1回答

动漫人物

bash -c后面应该跟一个字符串参数和要执行的命令,然后 bash 会做参数处理。cmd := exec.CommandContext(ctx, "bash", "-c", "python3 -c 'print(\"hello\")'")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go