我正在尝试通过tmux中的正在运行的进程设置管道 为了逐行处理它的输出。
我看过this guide to pipe the output of a tmux session to stdout
和this article about (named) pipes in go。
我现在已经尝试了很长一段时间了 但仍然没有得到任何值得注意的结果。
我真的很感激有关如何设置管道的任何想法,
理想情况下,我可以按行向排列。
非常感谢
答案 0 :(得分:0)
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)
}
}
这是tmuxpipe.sh:
mkfifo /tmp/tmuxpipe
tmux pipe-pane -o -t tmuxSession 'cat >> /tmp/tmuxpipe'
我之所以不仅仅使用exec.Command()
的原因,是因为某些原因超出了我的理解:
c := exec.Command("tmux", "pipe-pane", "-o", "-t", "tmuxSession", 'cat >> /tmp/tmuxpipe'")
err := c.Run()
handleError(err)
没有用(对我而言)。 没有发生错误,但tmux会话的输出也没有显示。
我希望这有助于任何人