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

如何在Python中从指定文件夹路径运行.sh脚本

解决方案

错误原因说明

你之前的写法无法生效有两个核心原因:

  • 每个subprocess创建的子进程运行环境独立,第一个cd命令执行后仅作用于当前子进程,后续执行脚本的子进程不会继承目录切换的结果
  • 开启shell=True时如果传入列表参数,仅第一个元素会被作为shell命令执行,其余参数会被当作命令的额外参数处理,因此cd操作不会和脚本执行关联生效

可行方案

方案1:使用cwd参数指定工作目录(最推荐)

subprocess的执行方法原生提供cwd参数,可直接指定子进程的运行工作目录,无需手动执行cd命令,安全性最高。
注意路径中的~属于shell的用户目录占位符,需要用os.path.expanduser展开为实际绝对路径:

import subprocess
import os

# 展开用户目录占位符,获取脚本所在目录的绝对路径
script_dir = os.path.expanduser("~/ros_ws")
# 指定工作目录运行脚本
subprocess.call(["./intera.sh"], cwd=script_dir)

方案2:合并命令为单字符串执行(仅适用于路径无特殊字符场景)

如果需要保留cd+执行的写法,需要把两条命令用&&拼接为单个字符串,同时开启shell=True:

import subprocess

subprocess.call("cd ~/ros_ws && ./intera.sh", shell=True)

注意:该方式存在shell注入风险,若路径包含用户可控的特殊字符不要使用该方案

方案3:直接调用脚本绝对路径(仅适用于脚本不依赖自身所在目录相对资源的场景)

如果你的.sh脚本内部没有用到相对路径访问同目录下的其他文件,也可以直接调用脚本的绝对路径:

import subprocess
import os

script_full_path = os.path.expanduser("~/ros_ws/intera.sh")
subprocess.call([script_full_path])

额外注意事项

运行前请确保.sh脚本有可执行权限,可在终端执行以下命令添加权限:
chmod +x ~/ros_ws/intera.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:45:05