将Linux下Python subprocess代码移植到Windows时遇WinError 10106错误求助
解决Windows下subprocess子进程WinError 10106报错问题
这个错误本质是Windows Winsock服务提供商加载失败,下面是几个针对性的解决方向:
检查环境变量继承
移植时如果手动构造了子进程的环境变量(比如直接用env={...}),会丢失系统默认的关键变量(如SystemRoot、包含系统组件的PATH路径)。正确做法是基于当前环境变量复制修改:import os import subprocess env = os.environ.copy() # 只修改需要调整的变量,比如添加自定义路径 env["MY_CUSTOM_PATH"] = "C:/my/app" subprocess.run(["your_command"], env=env)重置Winsock组件
系统层面的Winsock配置损坏是常见诱因,以管理员身份打开命令提示符,执行:netsh winsock reset执行完成后重启电脑,再测试代码。
避免错误的进程创建参数
不要随意设置creationflags参数(比如误用CREATE_NEW_PROCESS_GROUP等不匹配的标志),也确保在使用shell=True时,系统PATH中能找到cmd.exe。验证Python安装完整性
如果是绿色版Python或安装时缺失组件,可能导致子进程初始化依赖缺失。卸载现有Python,重新安装官方版本,并勾选“Add Python to PATH”选项。检查标准流配置
避免在subprocess.run()中设置异常的stdin/stdout/stderr值,比如不要直接关闭流(close_fds=True在Windows下有特殊限制),先尝试使用默认配置或明确设置为subprocess.PIPE。
内容的提问来源于stack exchange,提问作者ncoghlan
相关产品推荐
相关产品推荐

