跨编程语言数据交互:调用外部C++ .exe实现输入输出传递的方法
无文件实现程序间数据传递的方法(适配你的C++可执行场景)
嘿,这个问题问得挺到位的!完全可以不用借助任何文件实现程序间的原始数据传递——你的C++程序刚好是从标准输入(stdin)读取输入,然后把计算结果通过进程退出码(也就是return的值)返回,完美适配这种无文件的交互逻辑,根本不需要额外的文件中间件。
下面分别给你列出C#和Python的具体实现代码,以及用到的核心函数:
C# 实现方案
C#里可以通过Process类来控制外部进程,重定向它的标准输入,然后获取退出码。直接看代码:
using System; using System.Diagnostics; class Program { static void Main() { // 配置外部进程的启动参数 ProcessStartInfo startInfo = new ProcessStartInfo { FileName = "ctesting.exe", RedirectStandardInput = true, // 开启标准输入重定向 UseShellExecute = false, // 必须设为false才能支持输入输出重定向 CreateNoWindow = true // 可选参数,不想弹出控制台窗口就开这个 }; using (Process process = Process.Start(startInfo)) { // 向ctesting.exe传入输入值,比如这里传数字5 process.StandardInput.WriteLine("5"); process.StandardInput.Close(); // 关闭输入流,告诉对方输入已完成 process.WaitForExit(); // 等待外部进程执行结束 // 获取返回的结果(n+1),这里应该是6 int result = process.ExitCode; Console.WriteLine($"ctesting.exe返回的结果是:{result}"); } } }
核心函数/类说明:
ProcessStartInfo:用来配置外部进程的启动参数,比如指定可执行文件路径、是否重定向输入输出Process.StandardInput:获取外部进程的标准输入流,通过它可以向对方写入数据Process.ExitCode:获取外部进程的退出码,也就是你的C++程序return的数值
Python 实现方案
Python里用subprocess模块就能轻松搞定,逻辑和C#一致:重定向标准输入,然后读取返回码。代码示例:
import subprocess # 准备要传入的输入值,比如数字5 input_num = "5" # 启动ctesting.exe并传递输入 process_result = subprocess.run( ["ctesting.exe"], input=input_num.encode("utf-8"), # 把字符串转成字节流写入标准输入 capture_output=False, # 我们只关心返回码,不需要捕获控制台输出 check=False # 即使进程返回非0值也不抛出异常 ) # 获取返回的结果(n+1),这里应该是6 print(f"ctesting.exe返回的结果是:{process_result.returncode}")
核心函数说明:
subprocess.run():启动并控制外部进程的核心函数,支持配置各种进程参数input参数:用来传递给外部进程的标准输入数据(需要转成字节格式)returncode属性:获取外部进程的退出码,对应C++程序的return值
小提醒
要注意:操作系统的进程退出码一般限制在0-255之间,如果你的n+1超过这个范围,数值会被截断。如果需要传递更大的数值,建议把C++程序改成通过**标准输出(stdout)**返回结果(比如用cout打印n+1),然后在C#/Python里捕获标准输出即可,逻辑和传递输入类似,只是换成读取StandardOutput或stdout。
内容的提问来源于stack exchange,提问作者Wired Differently




