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

.NET 6控制台应用通过Python子进程调用时无法连接MySQL

问题描述

我有一个基于.NET 6开发的控制台应用,它可连接MySQL数据库并执行查询,在IDE或终端中运行完全正常。我编写了Python 3脚本,通过以下方式调用该应用:

proc = subprocess.Popen([path_to_exe, json_file, "-o", out_dir], env={'ConnectionStrings__WriteConnection':'server=localhost; port=3306; database=test; user=root; password=; Persist Security Info=False; Connect Timeout=300'})

应用能启动,但会报错:Unable to connect to any of the specified MySQL hosts.我已验证连接字符串已正确传递至.NET应用,且仅在通过Popen调用时出现此问题,请问可能的原因是什么?

可能的原因及解决办法
  • 环境变量被覆盖:你直接给Popen传了自定义的env字典,这会完全替换掉原有系统环境变量,导致.NET程序找不到MySQL驱动依赖的系统配置(比如PATH里的相关组件路径)。解决方式是先复制当前环境变量,再追加自定义连接字符串:
    import os
    current_env = os.environ.copy()
    current_env['ConnectionStrings__WriteConnection'] = 'server=localhost; port=3306; database=test; user=root; password=; Persist Security Info=False; Connect Timeout=300'
    proc = subprocess.Popen([path_to_exe, json_file, "-o", out_dir], env=current_env)
    
  • localhost解析差异:终端/IDE里的localhost通常解析到IPv4的127.0.0.1,但Popen启动的进程可能因环境差异优先解析到IPv6的::1,而你的MySQL服务可能没开启IPv6监听。试试把连接字符串里的server=localhost改成server=127.0.0.1。
  • 运行上下文权限不同:IDE/终端是用当前普通用户身份运行,而Python脚本可能以其他权限(比如服务账户、管理员身份)启动,导致该用户被MySQL的连接白名单限制。检查Python脚本的运行用户是否能访问3306端口,或者MySQL是否允许该用户从本地连接。
  • 驱动依赖缺失:如果.NET应用是单文件发布的,可能存在MySQL驱动(比如MySqlConnector.dll)加载异常的情况。可以检查发布目录是否包含完整的依赖文件,或者切换成非单文件发布模式测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:30:44