【问题标题】:golang exec with cmd as argument does not print stdout以 cmd 为参数的 golang exec 不打印标准输出
【发布时间】:2021-07-29 06:36:59
【问题描述】:
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())
}

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

【问题讨论】:

  • cmd.Run 返回的错误是什么? err 为 nil 时的输出是什么?

标签: go exec stdout


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    相关资源
    最近更新 更多