2017-08-20 3 views
0

Ich versuche, eine Rohrleitung aus einem laufenden Prozess in tmux,
, um seine Ausgabe Zeile für Zeile behandeln.wie Prozessausgabe in gehen mit Named Pipe

Ich habe mir this guide to pipe the output of a tmux session to stdout
und this article about (named) pipes in go angesehen.

Ich habe schon eine Weile damit herumprobiert,
aber immer noch keine nennenswerten Ergebnisse erhalten.

Ich würde mich über Gedanken freuen, wie man das Rohr aufstellt,
Idealerweise so, dass ich ihn zeilenweise überspannen kann.

Vielen Dank

Antwort

0

Hier ist die Lösung, die ich here gefunden (danke 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) 
    } 
} 

hier ist die tmuxpipe.sh:

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

Der Grund, warum ich es nicht tat benutze einfach exec.Command() da, aus irgendeinem Grund außerhalb meines Verständnisses:

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

hat nicht funktioniert (für mich). Es ist kein Fehler aufgetreten, aber die Ausgabe der tmux-Sitzung wurde ebenfalls nicht angezeigt.

Ich hoffe, das hilft jedem

Verwandte Themen