Я выполняю кучу операций над SSH на удаленной машине, и я передаю их stdout и stderr, а затем передаю их пишущему, который записывает в локальные stdout и stderr вместе с байтовыми буферами.
Непосредственно перед тем, как писатель использует это, я хочу выполнить ряд строковых манипуляций с ним, а затем записать на мой экран и в буфер.До этого момента все отлично работает и денди.
Моя проблема в том, что это больше не поток, он зависает, а затем выводит весь глобус в один фрагмент.Я хочу, чтобы это было в режиме реального времени, поэтому я включил каналы в свои процедуры go, но без улучшения.Ниже приведены мои функции, дайте мне знать, если вы можете найти причину, или, возможно, лучший способ достижения этого.
// отправка
func handleStdStream(filters []string, replaceFilters map[string]string, pipe io.Reader, readers chan io.Reader) {
if filters != nil {
// filters exist
// read first 8 bytes
res := readPipe(8, pipe)
// get each line from the resulting streamed output
for _, str := range strings.Split(res, "\n") {
if str != "" {
out := lineFilterAndReplace(str, filters, replaceFilters)
// instantiate an io.Reader obj from the given string
outReader := strings.NewReader(out)
readers <- outReader
}
}
} else {
// filters dont exist
if len(replaceFilters) > 0 {
res := readPipe(8, pipe)
for _, str := range strings.Split(res, "\n") {
if str != "" {
out := lineReplace(str, replaceFilters)
// instantiate an io.Reader obj from the given string
outReader := strings.NewReader(out)
readers <- outReader
}
}
} else {
readers <- pipe
}
}
}
// получение
outReaders := make(chan io.Reader)
go handleStdStream(outFilters, replaceFilters, stdoutIn, outReaders)
go func() {
for {
pipe := <-outReaders
_, errStdout = io.Copy(outWriter, pipe)
}
// _, errStdout = io.Copy(outWriter, stdoutIn)
}()