メモリにあるデータを使用してimagemagick のconvert
コマンドを呼び出します (html フォームのアップロード/Web サーバーから)。これはうまくいきますが、エラーが発生した場合のエラー出力を取得したいと思い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.
しかし、私の小さなプログラムではこのエラー メッセージが「表示」されません。エラー メッセージを取得してユーザーに表示するにはどうすればよいですか?
(そして、別のサブ質問: このコードが問題ないように見える場合、アドバイスをいただけますか? 明らかな欠陥はありますか?)