golang使用stdio与子进程进行通信

news/2025/4/22 1:33:28

在使用Cline调用本地MCP Server的时候,使用的是STDIO模式,也就是Cline启动一个子进程来运行MCP Server,然后通过STDIO来进行通信。这种方式即高效又安全。

import ("bufio""fmt""io""os/exec""time"
)func Run() {// 定义要执行的命令(例如:运行一个 Python 脚本)cmd := exec.Command("python", "-u", "-c", `user_input = input(); print("child get message: " + user_input)`)// 获取子进程的标准输入、输出和错误流stdin, err := cmd.StdinPipe()if err != nil {fmt.Println("Error creating stdin pipe:", err)return}defer stdin.Close()stdout, err := cmd.StdoutPipe()if err != nil {fmt.Println("Error creating stdout pipe:", err)return}// 启动子进程,异步的方式执行命令if err := cmd.Start(); err != nil {fmt.Println("Error starting command:", err)return}// 使用 bufio 读取子进程的输出go func() {reader := bufio.NewReader(stdout)for {line, err := reader.ReadString('\n')if err != nil && err != io.EOF {fmt.Println("Error reading from stdout:", err)break}if line != "" {fmt.Print(line)}if err == io.EOF {break}}}()// 向子进程的标准输入写入数据input := "Hello from Go!\n"fmt.Fprintf(stdin, input)// 等待子进程结束if err := cmd.Wait(); err != nil {fmt.Println("Error waiting for command:", err)}time.Sleep(3 * time.Second)
}

运行程序输出:child get message: Hello from Go!


https://dhexx.cn/news/show-5497350.html

相关文章

每日文献(十三)——Part one

今天看的是《RefineNet: Iterative Refinement for Accurate Object Localization》。 目录 零、摘要 0.1 原文 0.2 译文 一、介绍 二、RefineNet A. Fast R-CNN B. Faster R-CNN C. RefineNet 训练 D. RefineNet 测试 零、摘要 0.1 原文 We investigate a new str…

MySQL——存储

一、什么是存储过程 存储过程(Stored Procedure) 是预编译并存储在数据库中的一段SQL代码集合,支持参数传递、流程控制和返回值。通过类似“方法调用”的方式执行,存储过程将复杂业务逻辑封装在数据库层,简化应用开发…

案例:塔能科技驱动河南某市政照明智慧升级

在城市发展的进程中,节能减排与智能化升级始终是备受瞩目的关键议题。市政照明作为城市基础设施的重要组成部分,其能源利用效率与智能化管理水平,直接关乎城市的绿色发展与居民的生活品质。今天,就让我们深入了解塔能科技在河南某…

Kotlin协程之异常处理(launch和async的异常处理机制详解)

一 异常传播机制 先将异常传递给子协程,取消其所有子线程;(取消级联) 而后取消自身; 再将异常传递给父协程,父协程接收到异常后,会取消其下所有子协程之后取消自身,再向上传递&…

STM32F407实现内部FLASH的读写功能

文章目录 前言一、FLASH 简介二、读数据三、写数据四、最终效果五、完整工程 前言 我们通过仿真器下到芯片的程序一般会保存到eflash里面,在我们的STM32F407里面这里的空间挺大的,我所使用的芯片型号是STM32F407ZGT6,FLASH 容量为 1024K 字节…

日常记录-CentOS 9安装java17

文章目录 前言一、手动安装 Oracle JDK 17 或 OpenJDK 17(适合自定义路径)二、使用 CentOS 9 系统包安装 OpenJDK 17(简单稳定)三、使用 SDKMAN(管理多个版本)总结 前言 CentOS 9安装java17 一、手动安装 …

AI agents系列之智能体框架介绍

1. 引言 智能体AI Agents框架通过赋予自主系统动态感知、推理和行动的能力,彻底改变了AI领域。本节将探讨智能体框架的核心概念,并重点介绍为什么开源解决方案对现代AI开发的创新和可扩展性至关重要。 1.1 什么是智能体框架? 智能体框架代…

用Python手搓一个简单的饭店管理系统(上篇)

用Python手搓一个简单的饭店管理系统(上篇) :用Python手搓一个简单的饭店管理系统(上篇) 最终系统效果展示:

Aosp13 文件应用点击apk无反应的处理

最近遇到一个问题,在A13上,打开文件管理应用时,点击apk 无反应或者启动安装进程后安装完成或取消安装进程,再次点击apk 无反应。在此记录该问题。 做一下修改:root/package/ providers/DownloadProvider/下 jenkinsdel…

计算机网络 - 四次挥手相关问题

通过一些问题来讨论 TCP 的四次挥手断开连接 说一下四次挥手的过程?为什么需要四次呢?time-wait干嘛的,close-wait干嘛的,在哪一个阶段?状态CLOSE_WAIT在什么时候转换成下一个状态呢?为什么 TIME-WAIT 状态…