首页 > 解决方案 > 以 cmd 为参数的 golang exec 不打印标准输出

问题描述

cmdstr := "ssh -i ....... blah blah blah" ssh to an ip and run rpm command to install rpm
cmd := exec.Command("/bin/bash", "-c", cmdstr)
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
    fmt.Println(out.String())
}

如果我有没有 /bin/bash 的 ping 命令,out.String() 不会打印任何内容。任何人都知道为什么?

标签: goexecstdout

解决方案


cmd.Stdout 捕获命令执行成功的输出
cmd.Stderr 捕获执行过程中发生错误时的命令输出

您可以尝试使用 cmd.Output() 变体并从 Stderr 捕获执行错误

cmdstr := "ssh -i ....... blah blah blah" // ssh to an ip and run rpm command to install rpm
cmd := exec.Command("/bin/bash", "-c", cmdstr)
var errb bytes.Buffer
cmd.Stderr = &errb
output, err := cmd.Output()
if err != nil {
    fmt.Printf("error: %s", errb.String()) // capture any error output
}

fmt.Println(string(output)) // when successful

推荐阅读