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.
但我没有在我的小程序中“看到”这个错误消息。如何获取错误消息并将其显示给我的用户?
(另一个子问题是:如果这段代码看起来不错,你能给我一个建议吗?它有什么明显的缺陷吗?)