Ich versuche Ausgang des externen Programms zu fangen. Beispiel:
#include <stdio.h>
#include <unistd.h>
#include <stddef.h>
int main() {
int i = 0;
while(i < 10) {
printf(i = %i\n, i++);
usleep(2000000);
}
return 0;
}
Und hier ist mein main.go:
package main
import (
bufio
io
log
os/exec
)
func reecho(closer io.ReadCloser) {
reader := bufio.NewReader(closer)
for {
s, e := reader.ReadString('\n')
if e != nil {
log.Println(e)
break
}
log.Println(s)
}
}
func main() {
cmd := exec.Command(./infcount)
log.Println(starting , cmd)
stdout, err := cmd.StdoutPipe()
stderr, _ := cmd.StderrPipe()
if err != nil {
log.Fatal(err)
}
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
go reecho(stdout)
go reecho(stderr)
if err := cmd.Wait(); err != nil {
log.Fatal(err)
}
}
Das Problem ist, Puffern von stdout. „Reecho“ Daten nur erhalten, wenn 4096 Bytes in stdout Puffern oder ein Programm (für mein kurzes Beispiel) zu verlassen. Gibt es Art und Weise Größe des Puffers zu verringern jede Zeile der Ausgabe zu fangen?
Update: Samen binär ‚infcount‘ funktioniert gut, wenn von Shell lief. Es schreibt jedes ‚i‘ auf dem Bildschirm.