2
我想寫一個函數,它需要一個SSH會話並運行一個命令,並提供一個io.Reader
,它會在接收到輸出時讀取它的輸出。從SSH輸出異步讀取
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返回錯誤嗎? (這段代碼也不能編譯,你使用的是不同的東西?) – JimB
上面的代碼修復了錯誤。我正在使用不同的東西,但我確信這些變化並不是我所擁有的問題的基礎。我的意思是,有時它運行時會打印命令的輸出,而其他時間則什麼也不打印。再次感謝! – Langston