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

chroot环境中Python subprocess.run无法执行脚本的原因排查

问题分析与解决

你的问题出在两个核心点上:

1. chroot后未切换当前工作目录

os.chroot(".")仅将进程的根目录替换为当前目录,但进程的当前工作目录仍停留在原来的路径(比如/yadda/yadda)。在chroot环境中,这个原始路径并不存在,所以执行./b.sh时,系统实际是在chroot根目录下查找/yadda/yadda/b.sh,自然会提示文件不存在。

解决方法是在chroot后立刻切换当前工作目录到新的根目录(即chroot后的/,对应原来的当前目录):

import os, subprocess

os.chroot(".")
os.chdir("/")  # 新增该行,切换到chroot后的根目录
subprocess.run(["./b.sh"])

2. chroot环境缺少脚本解释器

就算解决了路径问题,你还会遇到新错误——b.sh的shebang是#!/usr/bin/env bash,但空的chroot环境里既没有/usr/bin/env,也没有bash二进制文件,系统找不到脚本的执行器。

你需要把bash及其依赖库复制到chroot目录的对应路径:

  • 先找到bash的位置:执行which bash,通常结果是/bin/bash
  • 复制bash到chroot目录的bin下:cp /bin/bash ./bin/
  • 用ldd /bin/bash查看bash依赖的库文件,将所有列出的.so文件复制到chroot目录对应的lib或lib64路径中

也可以直接修改b.sh的shebang,指定chroot环境里的bash绝对路径(比如你把bash放到了/bin/bash):

#!/bin/bash
echo whateva

总结

先切换chroot后的工作目录,再确保chroot环境内有脚本所需的解释器及依赖库,就能正常执行脚本了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:35:02