【发布时间】:2015-10-14 04:03:31
【问题描述】:
我想编写一个函数,它接受一个 SSH 会话并运行一个命令,提供一个 io.Reader,它会在收到它的输出时读取它。
package main
import (
"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
但是,当我在 output 上使用 ioutil.ReadAll 测试此代码时,即使在调用 session.Wait() 之后,它也只会间歇性地打印适当的输出。为什么会这样?有没有更好的方法来返回函数输出(也许是通道?)?谢谢!
【问题讨论】:
-
它只是间歇性地打印适当的输出是什么意思? ReadAll 是否返回错误? (这段代码也编译不了,你是不是用了别的东西?)
-
上面的代码修复了这个错误。我正在使用不同的东西,但我确信这些变化对我的问题并不重要。我的意思是,有时它在运行时会打印命令的输出,而其他时候什么也不打印。再次感谢!
标签: asynchronous ssh go io