1. ホーム
  2. go

[解決済み] Goでシステムコマンドの出力を得るには?

2023-02-17 02:08:27

質問

goプログラムの中で'ls'を実行し、その結果を文字列に格納したいとします。exec と os パッケージにプロセスをフォークするコマンドがいくつかあるようですが、それらは stdout などのファイル引数を必要とします。文字列として出力を取得する方法はありますか?

どのように解決するのですか?

編集してください。 この回答は時代遅れです。以下を参照してください。 Fatih Arslanの回答 をご覧ください。


使用方法 exec.実行 を指定することで パイプ を標準出力(必要なら標準エラー出力も)に指定します。cmd が返され、その中には os.File を含む cmd を返します。そして、それを読むには、例えば ioutil.ReadAll .

例です。

package main

import (
    "exec";
    "io/ioutil";
)

func main() {
    if cmd, e := exec.Run("/bin/ls", nil, nil, exec.DevNull, exec.Pipe, exec.MergeWithStdout); e == nil {
        b, _ := ioutil.ReadAll(cmd.Stdout)
        println("output: " + string(b))
    }
}