你在学习golang相关的知识吗?本文《如何在 Golang 程序中运行二进制文件并通过发送一些输入并等待输出来保持与其交互?》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文
你在学习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 中运行这个东西,这样它就不会阻塞应用程序的其余部分,发生在后台,等等。
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注编程网公众号,一起学习编程~
--结束END--
本文标题: 如何在 golang 程序中运行二进制文件并通过发送一些输入并等待输出来保持与其交互?
本文链接: https://www.lsjlt.com/news/596838.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-05
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0