Go初心者による備忘録のため、Go経験者にとっては当たり前の内容を書いていると思うことを先に書いておく
exec.Commandの出力をCLI上に表示させる方法
Goでは exec.Command
を利用することでシェル上でコマンドで実行するような形で、Goプログラムを通じてコマンドを実行できる。
例えば下記のような形で実行できる。
cmd := exec.Command("ls") err = cmd.Run() if err != nil { fmt.Printf("Command failed: %v\n", err) os.Exit(1) }
ただ、このような書き方の場合、ls
コマンドの実行出力結果はプログラム実行時に表示されないし、仮にエラーになったとしても exit status 1
が出るのみとなる。
成功した場合でもエラーの場合でも、シェル上で出力される内容を同じようにコンソール上に表示させるためには下記のようにする必要がある。
var out bytes.Buffer var stderr bytes.Buffer cmd := exec.Command("ls") cmd.Stdout = &out cmd.Stderr = &stderr err = cmd.Run() if err != nil { fmt.Printf("Command failed: %v\n%v\n", err, stderr.String()) os.Exit(1) } fmt.Printf("Result:\n%v\n", out.String())
これで成功した場合でもエラーとなった場合でも、それぞれの出力結果が実行時のコンソール上に表示される。