从Golang程序中生成某些程序后,我希望能够与它们完全通讯。我已经拥有的是生成过程并根据从stdout读取的最后一行通过管道进行对话:package mainimport ( "fmt" "io" "log" "os/exec" "strings")var stdinPipe io.WriteCloservar stdoutPipe io.ReadCloservar err errorfunc main() { cmd := &exec.Cmd{ Path: "/Users/seba/Projects/go/src/bootstrap/in", Args: []string{"program"}, } stdinPipe, err = cmd.StdinPipe() if err != nil { log.Fatal(err) } stdoutPipe, err = cmd.StdoutPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } var stdoutLines []string go stdoutManage(stdoutLines, stdoutController) cmd.Wait()}// TODO: imporove as in io.Copyfunc stdoutManage(lines []string, manager func(string)) { buf := make([]byte, 32*1024) for { nr, err := stdoutPipe.Read(buf) if nr > 0 { thelines := strings.Split(string(buf), "\n") for _, l := range thelines { manager(l) lines = append(lines, l) } } buf = make([]byte, 32*1024) // clear buf if err != nil { break } }}但是,这种方法在清除终端输出的程序和以某种方式缓冲标准输入或根本不使用标准输入的程序方面存在问题(不知道是否可能)。那么问题来了:是否存在一种与程序进行通信的可移植方式(它可以是非Golang解决方案)?
1 回答
- 1 回答
- 0 关注
- 248 浏览
添加回答
举报
0/150
提交
取消