func main() {
r, w := io.Pipe()
cmd := exec.Command("python", "-u", "script.py")
cmd.Stdout = w
err := cmd.Start()
if err != nil {
log.Fatal("error starting command:", err)
}
bufr := bufio.NewReader(r)
for {
line, err := bufr.ReadString('\n')
if err != nil {
if err == io.EOF {
break
}
log.Fatal("error reading line", err)
}
fmt.Print(line)
}
// Wait обязательно нужно вызвать если пользуетесь cmd.Start
// это написано в документации к Start
err = cmd.Wait()
if err != nil {
log.Fatal("error processing command:", err)
}
}
Потому что приведенный код нормальный, он не вызывает утечки дескрипторов, поэтому такую ошибку на нем не воспроизвести. Я погонял его несколько минут под жесткой нагрузкой в 80тыс запросов в секунду, все в порядке.