You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从C#调用带大参数的Python可执行文件时遇路径过长错误

解决C#调用Python可执行文件传递大参数的问题

Windows系统对命令行参数长度有默认上限(通常为8191字符),直接通过Arguments传递大字符串会触发"The filename or extension is too long"错误。以下是两种实用的替代方案:

方案一:通过标准输入(stdin)传递参数

利用进程的标准输入流传递大内容,避免命令行长度限制。

C# 代码

using System.Diagnostics;
using System.IO;

// 配置进程启动信息
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Components\test.exe");
start.UseShellExecute = false;
start.CreateNoWindow = true;
start.RedirectStandardInput = true; // 启用标准输入重定向

using (Process process = Process.Start(start))
{
    // 将参数写入标准输入,用换行符分隔不同参数
    process.StandardInput.WriteLine(CAP);
    process.StandardInput.WriteLine(SDT);
    process.StandardInput.WriteLine(EFF);
    process.StandardInput.Close(); // 关闭输入流,告知子进程数据已发送
    
    process.WaitForExit(); // 可选:等待Python进程执行完成
}

Python 代码(test.py,打包为exe前的源码)

import sys

def main():
    # 从标准输入按行读取参数,去除首尾空白符
    cap = sys.stdin.readline().strip()
    sdt = sys.stdin.readline().strip()
    eff = sys.stdin.readline().strip()
    # 这里添加你的业务逻辑处理代码

if __name__ == "__main__":
    main()

方案二:通过临时文件传递参数

将大参数序列化后写入临时文件,仅传递文件路径作为命令行参数,Python端读取文件内容解析参数。

C# 代码

using System.Diagnostics;
using System.IO;
using System.Text.Json;

// 创建临时文件并写入参数(用JSON格式序列化多个参数)
string tempFilePath = Path.GetTempFileName();
var parameters = new { CAP = CAP, SDT = SDT, EFF = EFF };
string jsonContent = JsonSerializer.Serialize(parameters);
File.WriteAllText(tempFilePath, jsonContent);

// 配置进程启动信息
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Components\test.exe");
start.Arguments = tempFilePath; // 仅传递临时文件路径
start.UseShellExecute = false;
start.CreateNoWindow = true;

using (Process process = Process.Start(start))
{
    process.WaitForExit();
    // 执行完成后删除临时文件(可选)
    File.Delete(tempFilePath);
}

Python 代码(test.py,打包为exe前的源码)

import sys
import json

def main():
    if len(sys.argv) < 2:
        return
    temp_file_path = sys.argv[1]
    # 读取并解析临时文件中的JSON参数
    with open(temp_file_path, 'r', encoding='utf-8') as f:
        parameters = json.load(f)
    cap = parameters['CAP']
    sdt = parameters['SDT']
    eff = parameters['EFF']
    # 这里添加你的业务逻辑处理代码

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者vignesh duraivel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:40:03