启动会话的单个阅读器goroutine。该goroutine从会话中读取数据并将数据发送到通道。
在主goroutine中,循环选择接收数据和超时情况。适当处理每种情况。
type SSHLib struct { Stdout io.Reader Buffer string Data chan string // <-- Add this member}// New creates a new SSHLib. This example shows the pre // relevant to reading stdout only. func New() *SSHLib { s := &SSHLib{data: make(chan string)} go s.Reader() return s}// Reader reads data from stdout in a loop.func (s *SSHLib) Reader() { var data = make([]byte, 1024) for { n, err := s.Stdout.Read(data) if err != nil { // Handle error return } s.Data <- string(data[:n]) }}// GetData receives data until regexp match or timeout.func (s *SSHLib) GetData() { t := time.NewTimer(time.Second) defer t.Stop() for { select { case d := <-s.data: s.Buffer += d // Check for regexp match in S.Buffer case <-t.C: // Handle timeout return } }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)