为了账号安全,请及时绑定邮箱和手机立即绑定

使用管道与程序过程进行通信

使用管道与程序过程进行通信

Go
慕森卡 2021-05-13 14:50:34
从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
提交
取消
意见反馈 帮助中心 APP下载
官方微信