为了账号安全,请及时绑定邮箱和手机立即绑定

从 SSH 输出异步读取

从 SSH 输出异步读取

Go
噜噜哒 2021-11-15 16:14:56
我想编写一个接受 SSH 会话并运行命令的函数,提供一个io.Reader在收到时读取其输出的函数。package mainimport (    "golang.org/x/crypto/ssh"    "io")func StreamOutput(session *ssh.Session, command string) (output io.Reader, err error) {    if session != nil {        defer session.Close()    }    if err != nil {        return output, err    }    // connect to both outputs    outReader, err := session.StdoutPipe()    if err != nil {        return output, err    }    errReader, err := session.StderrPipe()    if err != nil {        return output, err    }    output = io.MultiReader(outReader, errReader)    err = session.Start(command)    // return the readers that are to be read from    return output, err但是,当我使用ioutil.ReadAllon测试此代码output时,它只会间歇性地打印适当的输出,即使在调用session.Wait(). 为什么会这样?有没有更好的方法来返回函数输出(可能是通道?)?谢谢!
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

问题是我的函数中有以下代码:


if session != nil {

    defer session.Close()

}

这样,输出只会在命令完成并在函数返回之前发回其标准输出时打印(这种情况很少见)。我通过删除这些行来修复我的代码。


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信