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

Python3.7 subprocess.Popen在一台Buster系统树莓派上报[Errno 2] No such file or directory

问题根因定位及解决方案

这个报错除了目标文件路径不存在的场景外,还包含内核无法成功加载执行目标二进制文件的情况,针对同系统不同代树莓派的场景,按以下优先级排查修复:


1. 验证目标二进制的架构兼容性

这是不同代树莓派同系统下最常见的触发原因:

  • 旧款树莓派(如Pi Zero、初代Pi)采用armv6l架构,新款树莓派(如Pi 3/4)采用armv7l/aarch64架构
  • 如果你要调用的二进制是针对armv7/aarch64编译的,在armv6架构的设备上运行时,系统会直接抛出No such file or directory错误,和文件不存在的报错完全一致
  • 验证方式:在报错的树莓派上直接执行二进制全路径,比如/usr/bin/你的目标命令,如果终端返回-bash: /usr/bin/你的目标命令: No such file or directory,即可确定是架构不兼容问题
  • 修复方案:重新编译目标二进制适配当前设备的armv6架构,或者安装对应架构的官方软件包

2. 检查动态链接依赖缺失

如果架构匹配,接下来排查动态库依赖:

  • 执行ldd 你的目标命令全路径,检查输出中是否有标记为not found的依赖库
  • 比如部分软件编译时依赖的glibc版本高于Buster自带的版本,也会触发同类报错
  • 修复方案:安装缺失的依赖库,或者重新编译二进制适配当前系统的库版本

3. 修正subprocess调用写法

你禁用了shell=True,此时字符串格式的命令参数本身就无法被解析,必须用列表格式传参,正确写法示例:

import subprocess
# 正确:列表格式,第一个元素是命令全路径,后续元素为独立参数
p = subprocess.Popen(['/usr/bin/你的目标命令', '参数1', '参数2'])
# 错误:字符串格式,shell=False时无法解析空格分隔的参数
p = subprocess.Popen('/usr/bin/你的目标命令 参数1 参数2')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:15:05