Golang 프로그램에서 생성 한 후 일부 프로그램과 완전히 통신 할 수 있기를 원합니다.파이프를 사용하여 프로그램 프로세스와 통신하기
package main
import (
"fmt"
"io"
"log"
"os/exec"
"strings"
)
var stdinPipe io.WriteCloser
var stdoutPipe io.ReadCloser
var err error
func 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.Copy
func 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
}
}
}
그러나이 방법은 어떻게 든 표준 입력 완충 용액에 표준 입력을 사용하지 않는 터미널 출력 및 프로그램을 삭제 프로그램에 문제가 있습니다 : 내가 이미 가지고있는 것은 표준 출력에서 읽을 산란 과정과 마지막 줄에 따라 파이프를 통해 이야기입니다 모두 (그것이 가능한지 모른다).
그래서 질문 : 프로그램과 대화 할 수있는 휴대용 방법이 있습니까? (이것은 골란 솔루션이 아닐 수 있습니다)?
고마워요! 이것은 내 문제를 해결합니다. –