2017-08-20 8 views
0

J'essaye de mettre en place un tuyau à partir d'un processus courant dans tmux,
afin de gérer sa sortie ligne par ligne. J'ai regardé this guide to pipe the output of a tmux session to stdout
et this article about (named) pipes in go.comment gérer la sortie du processus en utilisant go pipe

J'ai essayé avec cela pendant un bon moment,
mais je n'ai toujours pas obtenu de résultats remarquables.

J'apprécierais vraiment toutes les réflexions sur la façon de régler ce tuyau,
Idéalement d'une manière que je puisse aller au-delà de la ligne.

Merci beaucoup

Répondre

0

Voici la solution que j'ai trouvé here (merci Malcolm)

func Readln(r *bufio.Reader) (string, error) { 
    var (
     isPrefix = true 
     err  error 
     line, ln []byte 
    ) 
    for isPrefix && err == nil { 
     line, isPrefix, err = r.ReadLine() 
     ln = append(ln, line...) 
    } 
    return string(ln), err 
} 

func handle(s string) { 
    //Do something with your string 
} 

func main() { 
    c := exec.Command("sh", "./tmuxpipe.sh") 
    err := c.Run() 
    if err != nil { 
     log.Fatal(err) 
    } 

    f, err := os.Open("/tmp/tmuxpipe") 
    if err != nil { 
     fmt.Printf("error opening file: %v\n", err) 
     os.Exit(1) 
    } 
    r := bufio.NewReader(f) 
    s, e := Readln(r) 
    for e == nil { 
     handle(s) 
     log.Println(s) 
     s, e = Readln(r) 
    } 
} 

est ici le tmuxpipe.sh:

mkfifo /tmp/tmuxpipe 
tmux pipe-pane -o -t tmuxSession 'cat >> /tmp/tmuxpipe' 

La raison pour laquelle je ne l'ai pas il suffit d'utiliser exec.Command() là, est parce que, pour une raison au-delà de ma compréhension, cela:

c := exec.Command("tmux", "pipe-pane", "-o", "-t", "tmuxSession", 'cat >> /tmp/tmuxpipe'") 
err := c.Run() 
handleError(err) 

ne fonctionnait pas (pour moi). Aucune erreur ne s'est produite, mais la sortie de la session tmux n'a pas été affichée non plus. Je souhaite que cela aide tout le monde