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

时间:2019-02-06 00:59:55

标签: go

如何在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)
}

1 个答案:

答案 0 :(得分:1)

我认为,实现此目标的正确方法是使用StdinPipe的{​​{1}}和StdoutPipe方法。

请参阅https://golang.org/pkg/os/exec/#Cmd.StdinPipe等中的示例。


下面是一个示例,该示例调用exec.Cmd命令(内置计算器,从stdin进行计算并将结果发送到stdout)并与之交互:

bc

在真实的程序中,您可能需要在goroutine中运行此程序,这样它才不会阻塞应用程序的其余部分,不会在后台发生等等。