我使用imagemagick的convert
命令調用內存中的某些數據(來自html表單上傳/ web服務器)。這工作正常,但我想在錯誤的情況下得到錯誤輸出convert
。我怎樣才能做到這一點?完成處理後讀取stderr
這是我的代碼:
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.
,但我不「看」我的小程序中的此錯誤消息。我如何獲取錯誤信息並將其顯示給我的用戶?
(而另一子的問題是:你可以給我一個建議,如果這個代碼看起來確定是否有任何明顯的缺陷?)
您將數據複製出來的方式似乎與Go的想法相矛盾;請參閱[對類似問題的此答案](http://stackoverflow.com/a/9323144/720999)以瞭解如何以更「高手」的方式執行此操作。 – kostix 2013-03-03 21:11:34