我想編寫一個接受 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 關注
- 247 瀏覽
添加回答
舉報
0/150
提交
取消