+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 如何在 golang 程序中运行二进制文件并通过发送一些输入并等待输出来保持与其交互? >

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

时间:2024-04-05 16:38:23

你在学习golang相关的知识吗?本文《如何在 Golang 程序中运行二进制文件并通过发送一些输入并等待输出来保持与其交互?》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容
如何在 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 方法。

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

下面是一个调用 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 中运行这个东西,这样它就不会阻塞应用程序的其余部分,发生在后台,等等。

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title