go プログラムで 'ls' を実行し、結果を文字列に保存したいとしましょう。exec および os パッケージにはプロセスをフォークするコマンドがいくつかあるようですが、stdout などにはファイル引数が必要です。出力を文字列として取得する方法はありますか?
109876 次
8 に答える
4
好みのパラダイムに応じて、次の 2 つのオプションがあります。
于 2009-12-10T04:28:21.260 に答える
3
exec.Runを使用して、stdoutにPipeを渡します。それが返すパイプから読み取ります。
于 2009-12-09T21:44:37.580 に答える
2
編集:この回答は廃止されました。以下の Fatih Arslan の回答をご覧ください。
Pipeを stdout (および必要に応じて stderr) として指定して、 exec.Runを使用します。これは、標準出力 (および標準エラー出力) フィールドに 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))
}
}
于 2009-12-11T06:13:12.240 に答える
1
string
出力が必要な場合は、 strings.Builder
[1] よりも効率的です
bytes.Buffer
。
package main
import (
"os/exec"
"strings"
)
func main() {
c, b := exec.Command("go", "version"), new(strings.Builder)
c.Stdout = b
c.Run()
print(b.String())
}
于 2021-04-04T21:29:02.663 に答える