如何在Python中运行带指定参数的shell脚本并输出结果到文件
可行实现方案
Python 中执行这类 shell 命令最常用的是标准库 subprocess,不需要安装第三方依赖,官方也更推荐用这个替代旧的 os.system 方案,两种常用的实现方式如下:
方案1:直接执行完整命令(适合参数固定的简单场景)
如果你的参数都是固定值、没有不可信的动态输入,可以直接用 shell=True 复用你终端的命令:
import subprocess # 直接填入你终端执行的完整命令即可 cmd = "./api.sh -t token -r rules.json -s data.json > data_2.json" # check=True 表示命令执行失败(返回非0状态码)时直接抛出异常,方便错误捕获 subprocess.run(cmd, shell=True, check=True)
方案2:拆分参数执行(更安全,动态传参优先选这个)
如果你的 token、文件路径是动态生成的,用 shell=True 有命令注入风险,建议拆分参数、用 Python 原生的文件操作做重定向:
import subprocess # 按空格拆分命令参数,不需要写重定向符号 args = ["./api.sh", "-t", "你的动态token值", "-r", "rules.json", "-s", "data.json"] # 直接把命令的标准输出写入目标文件 with open("data_2.json", "w", encoding="utf-8") as f: subprocess.run(args, check=True, stdout=f)
这种方式不需要额外启动 shell 进程,完全规避了参数注入的问题,动态传参时更稳妥。
常见问题排查
- 如果提示没有权限运行脚本,先给
api.sh加可执行权限:chmod +x api.sh,或者把命令里的./api.sh换成bash api.sh也可以 - 如果脚本不在当前 Python 脚本的工作目录下,可以给
subprocess.run加cwd="api.sh所在目录的绝对路径"参数指定运行目录 - 需要查看脚本的错误输出的话,可以加
stderr=subprocess.PIPE参数,执行后从返回结果的 stderr 属性里读取错误信息
内容的提问来源于stack exchange,提问作者emilk
相关产品推荐
相关产品推荐

