我希望在 Go 中执行一个 shell 命令,并在我的程序中将结果输出作为字符串获取。我看到了Rosetta Code版本:
package main import "fmt" import "exec" func main() { cmd, err := exec.Run("/bin/ls", []string{"/bin/ls"}, []string{}, "", exec.DevNull, exec.PassThrough, exec.PassThrough) if (err != nil) { fmt.Println(err) return } cmd.Close()
但这并没有以我可以以编程方式访问的方式捕获实际的标准输出或错误 - 那些仍然打印到常规标准输出/标准错误。我看到使用 Pipe 作为 out 或 err 可以在其他地方提供帮助,但没有示例说明如何这样做。有任何想法吗?
包“exec”稍有改变。以下代码对我有用。
package main import ( "fmt" "os/exec" ) func main() { app := "echo" arg0 := "-e" arg1 := "Hello world" arg2 := "\n\tfrom" arg3 := "golang" cmd := exec.Command(app, arg0, arg1, arg2, arg3) stdout, err := cmd.Output() if err != nil { fmt.Println(err.Error()) return } // Print the output fmt.Println(string(stdout)) }
我希望这有帮助!