我想编写一个接受 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()
}
这样,输出只会在命令完成并在函数返回之前发回其标准输出时打印(这种情况很少见)。我通过删除这些行来修复我的代码。
- 1 回答
- 0 关注
- 210 浏览
添加回答
举报
0/150
提交
取消