gpt4 book ai didi

go - 我怎样才能在我的 golang 程序中运行一个二进制文件,并通过发送一些输入并等待输出来保持与它的交互?

转载 作者:IT王子 更新时间:2023-10-29 01:43:52 25 4
gpt4 key购买 nike

如何在我的 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.CmdStdinPipeStdoutPipe 方法。

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

关于go - 我怎样才能在我的 golang 程序中运行一个二进制文件,并通过发送一些输入并等待输出来保持与它的交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54545286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com