概要
golang でコマンドをコールするユーティリティ的なのを作成してみました
備忘録のため残しておきます
環境
- CentOS 6.7 64bit
- golang 1.6
サンプルコード
package main
import (
"fmt"
"os/exec"
)
type Cmd struct {
cmd string
args []string
result string
}
func (cc *Cmd) execute() (err error) {
out, err := exec.Command(cc.cmd, cc.args[0:]...).CombinedOutput()
if err != nil {
return err
}
cc.result = saveResult(out)
return nil
}
func saveResult(out []byte) (ret string) {
return string(out)
}
func newCmd(cmd string, args []string) (cc *Cmd) {
cc = new(Cmd)
cc.cmd = cmd
cc.args = args
return cc
}
func NewEchoCmd(output []string) (cc *Cmd) {
return newCmd("echo", output)
}
func main() {
args := []string{"hoge", "fuga"}
cc := NewEchoCmd(args)
err := cc.execute()
if err != nil {
fmt.Println(err)
}
fmt.Println(cc.result)
fmt.Println("end")
}
最後に
コマンドを実行する専用のメソッドを作成することでコマンドを制限する感じにしています
execute したあとに結果が result に全部入るので、結果のパースは result に値が入ったあとにやる感じになります
本当は結果をパースするメソッドも作成して、コマンドに応じて必要な情報を取得できるようにしたかったのですが、いろいろと嵌りそうだったのでやめました
0 件のコメント:
コメントを投稿