如何从失败的命令读取Stdout

我有以下代码来检查到给定主机的SSH连接是否正常工作。

func IsSSHConnectionWorking(Host Host) bool {
    cmd :=
        fmt.Sprintf("ssh -o \"Passwordauthentication no\" -i %s -p %s %s@%s",Host.IdentityFile,Host.Port,Host.User,Host.IP)

    fmt.Printf("Connecting to %s with %s",Host.IP,cmd)

    output,err := exec.Command("bash","-c",cmd).Output()

    if err != nil {
        log.Println(err)
        log.Printf("Failed to connect to Host: %s\n Error: %s",output)
        return false
    }

    return true
}

我已经注意到,尽管参数错误,但返回到程序的错误是exit status 255,输出为空。

在CLI本身上执行有问题的命令将返回user@host: Permission denied (publickey,password).

有没有办法捕捉到这个?

qqsunwei 回答:如何从失败的命令读取Stdout

请尝试改用CombinedOutput,因为这将捕获stdout和stderr。同时,Output仅返回标准输出。

https://golang.org/pkg/os/exec/#Cmd.CombinedOutput

如果您仍要使用Output,请将错误投射到ExitError并同时检查ExitError.Stderr。

https://golang.org/pkg/os/exec/#Cmd.Output

本文链接:https://www.f2er.com/3160349.html

大家都在问