gpt4 book ai didi

go - 如何使用命名管道处理进程输出

转载 作者:数据小太阳 更新时间:2023-10-29 03:24:29 30 4
gpt4 key购买 nike

我正在尝试从 tmux 中正在运行的进程设置管道,
以便逐行处理其输出。

我看过this guide to pipe the output of a tmux session to stdout
this article about (named) pipes in go .

我已经尝试了很长一段时间,
但仍然没有得到任何值得注意的结果。

如果有任何关于如何设置该管道的想法,我将不胜感激,
理想情况下,我可以按行对其进行范围调整。

非常感谢

最佳答案

这是我找到的解决方案 here (谢谢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)
}
}

这里是 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 session 的输出也没有显示。

希望对大家有帮助

关于go - 如何使用命名管道处理进程输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45781644/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com