Attraper sortie stdout tamponnée de exec.Command

voix
0

Je suis en train de rattraper la sortie du programme externe. Exemple:

#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;
}

Et voici mon 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)
    }
}

Le problème est mise en mémoire tampon de sortie standard. « Retentir » obtenir des données que lorsque 4096 octets dans le tampon de sortie standard ou d'un programme de sortie (pour mon court exemple). Y at-il moyen de diminuer la taille du tampon pour attraper chaque ligne de sortie?

Mise à jour: binaire même « infcount » fonctionne très bien quand a couru de la coquille. Il écrit tous les « i » à l'écran.

Créé 18/12/2018 à 11:11
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

version de votre programme C qui permettra de suivre la sortie comme il arrive

   #include <stdio.h>
    #include <unistd.h>
    #include <stddef.h>

    int main() {

        int i = 0;

        while(i < 10) {
            printf("i = %i\n", i++);
            usleep(2000000);
            fflush(stdout);
        }
        return 0;
    }

Si c'est un programme précompilé existant alors stdbufpeut - être en mesure de le réparer, voir https://www.perkin.org.uk/posts/how-to-fix-stdio-buffering.html

Créé 18/12/2018 à 15:45
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more