进程完成后读取 stderr

我convert使用内存中的一些数据(来自 html 表单上传/网络服务器)调用 imagemagick 的命令。这工作正常,但我想在出现错误时获得错误输出convert。我怎样才能做到这一点?


这是我的代码:


package main


import (

    "bytes"

    "io"

    "io/ioutil"

    "log"

    "os/exec"

    "path/filepath"

)


func runImagemagick(data []byte, destfilename string) error {

    data_buf := bytes.NewBuffer(data)


    cmd := exec.Command("convert", "-", destfilename)

    stdin, err := cmd.StdinPipe()

    if err != nil {

        return err

    }


    err = cmd.Start()

    if err != nil {

        return err

    }

    _, err = io.Copy(stdin, data_buf)

    if err != nil {

        return err

    }

    stdin.Close()

    err = cmd.Wait()

    if err != nil {

        return err

    }

    return nil

}


func main() {

    data, err := ioutil.ReadFile("source.gif")

    if err != nil {

        log.Fatal(err)

    }

    err = runImagemagick(data, filepath.Join("/tmp", "abc", "dest.png"))

    if err != nil {

        log.Fatal(err)

    }

}

现在人为的问题是目录/tmp/abc/不存在。通常convert会给我这样的结果:


$ convert - /tmp/abc/foo.png < source.gif 

convert: unable to open image `/tmp/abc/foo.png': No such file or directory @ error/blob.c/OpenBlob/2617.

convert: WriteBlob Failed `/tmp/abc/foo.png' @ error/png.c/MagickPNGErrorHandler/1755.

但我没有在我的小程序中“看到”这个错误信息。如何获取错误消息并将其显示给我的用户?


(另一个子问题是:如果这段代码看起来不错,你能给我一个建议吗?它有什么明显的缺陷吗?)


沧海一幻觉
浏览 242回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go