You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

跨编程语言数据交互:调用外部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里捕获标准输出即可,逻辑和传递输入类似,只是换成读取StandardOutputstdout

内容的提问来源于stack exchange,提问作者Wired Differently

火山引擎 最新活动