我有一个颇具挑战性的情况,我需要在系统命令stout中写入它输出的相同stdout(在另一个运行的程序中),下面是一个代表我的意思的示 routine 序:
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
)
func main() {
rand.Seed(time.Now().Unix())
var greetings []string = []string{"hi", "hola", "bonjour", "hallo", "whats up"}
var greeting string = greetings[rand.Intn(len(greetings))]
fmt.Println(greeting)
reader := bufio.NewReader(os.Stdin)
message, _ := reader.ReadString('\n')
if message == greeting+"\n" {
fmt.Println("nice to meet you!")
} else {
fmt.Println("oops!")
}
}
由于您使用随机问候语打招呼,因此您必须读取标准输出,将其发送到标准输入,并捕获它是否是正确答案.我试过使用stdinPipes,但它在等待stdin关闭时冻结,因为我认为它只适用于命令运行的开始,所以对于正在运行的程序来说,它一直不适用于我……
我感谢任何人的帮助!
编辑
我想添加一些我想要做的事情,我也try 了不使用通道,但这似乎对结果没有影响,它只是冻结,等待stdin关闭,我需要在关闭stdin之前先获取stdout,因为它包括:
package main
import (
"io"
"os/exec"
)
func main() {
cmd := exec.Command("./executable_program")
stdout, _ := cmd.StdoutPipe()
stdin, _ := cmd.StdinPipe()
var c chan []byte = make(chan []byte)
cmd.Start()
go func() {
b, _ := io.ReadAll(stdout)
c <- b
}()
stdin.Write(<-c)
stdin.Close()
cmd.Wait()
}