Для считывания данных из бесконечного потока данных, такого как Stdout, в Go, можно использовать пакеты bufio
и os/exec
.
В простом случае, когда вы хотите прочитать строки из бесконечного потока данных, вы можете использовать Scanner из пакета bufio
. Вот пример кода:
package main import ( "bufio" "fmt" "os" "os/exec" ) func main() { // Создаем команду и настраиваем ее cmd := exec.Command("command", "arg1", "arg2") // Получаем Stdout pipe команды stdoutPipe, err := cmd.StdoutPipe() if err != nil { fmt.Println("Ошибка при создании pipe:", err) return } // Запускаем команду err = cmd.Start() if err != nil { fmt.Println("Ошибка при запуске команды:", err) return } // Создаем сканер для чтения из Stdout pipe scanner := bufio.NewScanner(stdoutPipe) // Считываем строки из Stdout и выводим их на экран for scanner.Scan() { fmt.Println(scanner.Text()) } // Проверяем наличие ошибок после завершения сканирования if err := scanner.Err(); err != nil { fmt.Println("Ошибка при чтении из Stdout:", err) } // Ждем пока команда завершится err = cmd.Wait() if err != nil { fmt.Println("Ошибка при ожидании завершения команды:", err) } }
В этом примере мы создаем новую команду и настраиваем ее с помощью exec.Command
. Затем мы получаем Stdout pipe этой команды с помощью cmd.StdoutPipe()
. После запуска команды с помощью cmd.Start()
, мы создаем сканер для чтения из Stdout pipe с помощью bufio.NewScanner
. Затем мы используем цикл for
для считывания каждой строки из Stdout pipe с помощью scanner.Scan()
, и выводим их на экран с помощью fmt.Println
. Мы проверяем ошибки с помощью scanner.Err()
. И, наконец, мы ждем, пока команда завершится с помощью cmd.Wait()
.
Обратите внимание, что в этом примере мы используем команду command
и аргументы arg1
и arg2
для демонстрации. Вам нужно заменить их на вашу собственную команду и аргументы.
Таким образом, вы можете использовать пакеты bufio
и os/exec
для считывания данных из бесконечного Stdout в Go.