如何在golang程序中运行二进制文件,并通过发送一些输入并等待输出来保持与它的交互?

如何在golang程序中运行二进制文件,并通过发送一些输入并等待输出来保持与它的交互?,go,Go,如何在golang程序中运行二进制文件,并通过发送一些输入并等待输出来保持与它的交互?在我做的事情中,我只运行过一次。我想让这个二进制文件保持运行并与之交互,我不想多次运行它 package main import ( "os/exec" "bytes" "fmt" ) func main() { command := exec.Command("./program") var output bytes.Buffer command.Stdou

如何在golang程序中运行二进制文件,并通过发送一些输入并等待输出来保持与它的交互?在我做的事情中,我只运行过一次。我想让这个二进制文件保持运行并与之交互,我不想多次运行它

package main

import (
    "os/exec"
    "bytes"
    "fmt"
)

func main() {
    command := exec.Command("./program")
    var output bytes.Buffer
    command.Stdout = &output
    command.Run()
    result := output.String()
    IV := result[:4]
    cipher := result[5:]
    cipher = cipher[:len(cipher)-1]
    fmt.Printf("%v", result)
    fmt.Printf("%v", IV)
    fmt.Printf("%v", cipher)
}

我认为实现这一点的正确方法是使用
exec.Cmd
StdinPipe
StdoutPipe
方法

参见等中的示例


下面是一个调用
bc
命令(内置计算器,从stdin获取计算结果并将结果发送到stdout)并与之交互的示例:

package main

import (
    "bufio"
    "fmt"
    "log"
    "os/exec"
)

func main() {
    cmd := exec.Command("bc", "-q")

    stdin, err := cmd.StdinPipe()
    if err != nil {
        log.Fatal(err)
    }

    stdout, err := cmd.StdoutPipe()
    if err != nil {
        log.Fatal(err)
    }

    if err := cmd.Start(); err != nil {
        log.Fatal(err)
    }

    stdin.Write([]byte("2 + 2\n"))

    r := bufio.NewReader(stdout)
    b, err := r.ReadBytes('\n')
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Read:", string(b))
}

在实际的程序中,您可能希望在goroutine中运行此功能,这样它就不会阻塞应用程序的其余部分,也不会在后台发生,等等。

请放在一边,您当前如何与
程序进行交互?标准输入/标准输出?管?插座?我不知道这是怎么回事,这就是我想弄明白的。我希望有人能在这方面指导我。我正在尝试与之交互的二进制文件接收输入、给出和输出,并等待另一个输入。所以我想做的就是用这种方式和它交互。听起来你好像在和stdin和stdout交互。看看这里:我正在尝试stdin,但我不知道如何才能写入二进制文件而不是我的程序。哦,我会试试这个。非常感谢你!