WSL Shell中wget可正常运行,Python subprocess调用失败问题排查
故障原因分析
- 环境变量继承差异:交互式Shell会自动加载
~/.bashrc、~/.profile这类配置文件里的网络代理、系统环境变量,但Python脚本(包括它启动的subprocess进程)默认是非交互式启动,不会加载这些配置,导致网络环境和手动执行Shell命令时完全不一样。 - WSL1网络特殊性:WSL1依赖Windows的网络栈,手动Shell可能通过自动同步Windows代理等方式拿到了正确的网络配置,但Python进程没有继承到这些配置。
- 隐藏的代理残留:你删除的只是pip单独设置的
https_proxy/http_proxy,但Python进程或subprocess可能还继承了全局的错误代理变量,或者缺少必要的代理配置。
解决方法
方法1:在脚本里显式配置环境变量
直接给subprocess或requests传递正确的网络环境:
针对subprocess:
import subprocess import os # 复制当前环境变量,添加正确的代理(替换成你的实际代理地址,不需要就清空) env = os.environ.copy() env["http_proxy"] = "http://你的代理IP:端口" env["https_proxy"] = "http://你的代理IP:端口" # 不需要代理的话,就删掉这两个变量 # env.pop("http_proxy", None) # env.pop("https_proxy", None) # 用修改后的环境执行wget subprocess.run(["wget", "https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken"], env=env, check=True)
针对requests:
import requests # 设置代理,不需要就传空字典 proxies = { "http": "http://你的代理IP:端口", "https": "http://你的代理IP:端口" } response = requests.get("https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken", proxies=proxies) with open("cl100k_base.tiktoken", "wb") as f: f.write(response.content)
方法2:让subprocess加载Shell配置
让subprocess以交互式Shell方式启动,自动加载~/.bashrc里的配置:
import subprocess # 用bash -i 启动交互式Shell,加载配置后执行命令 subprocess.run(["bash", "-i", "-c", "wget https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken"], check=True)
方法3:对比环境变量找差异
- 在手动执行成功的WSL终端里,运行
env | grep -i proxy,记录当前的代理配置。 - 在Python脚本里打印环境变量,对比差异:
import os print("http_proxy:", os.environ.get("http_proxy")) print("https_proxy:", os.environ.get("https_proxy"))
如果脚本里的代理和终端里的不一样,要么把正确的代理加到脚本里,要么在WSL的/etc/profile里添加全局代理配置,让所有进程都能继承。
方法4:彻底清空代理(无代理场景)
如果你的网络不需要代理,直接在脚本里清空所有代理相关的环境变量:
import os import subprocess # 删除所有代理变量 for key in list(os.environ.keys()): if key.lower() in ["http_proxy", "https_proxy", "all_proxy", "no_proxy"]: del os.environ[key] # 执行下载命令 subprocess.run(["wget", "https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken"], check=True)
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

