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

Mac下Python调用subprocess执行LibreOffice转PDF遇权限拒绝问题

问题原因及解决方法

核心错误点

  1. 独立进程的工作目录不共享:subprocess.run(["cd", libreoffice_path]) 会启动一个独立的shell进程执行cd命令,这个进程结束后,后续的subprocess.run仍然在脚本的原始工作目录下,根本没进入LibreOffice的MacOS目录。
  2. 命令参数拆分错误:第二个命令里把./soffice拆成了"./"和"soffice"两个参数,subprocess会把./当作要执行的命令(而目录本身不可执行),这就是你看到"Permission denied: './'"的直接原因。

正确的解决方式

方式一:指定工作目录调用

直接通过cwd参数让subprocess在LibreOffice的MacOS目录下执行命令:

import subprocess

libreoffice_path = "/Applications/LibreOffice.app/Contents/MacOS"
input_folder = "/path/to/your/input"
output_folder = "/path/to/your/output"

subprocess.run(
    ["./soffice", "--headless", "--convert-to", "pdf", input_folder, "--outdir", output_folder],
    cwd=libreoffice_path
)

方式二:使用完整路径调用soffice

不用切换目录,直接拼接soffice的完整路径:

import subprocess
import os

libreoffice_path = "/Applications/LibreOffice.app/Contents/MacOS"
soffice_exec = os.path.join(libreoffice_path, "soffice")
input_folder = "/path/to/your/input"
output_folder = "/path/to/your/output"

subprocess.run(
    [soffice_exec, "--headless", "--convert-to", "pdf", input_folder, "--outdir", output_folder]
)

额外注意事项

  • 确保input_folder和output_folder使用绝对路径,避免相对路径在不同工作目录下的解析问题。
  • 检查output_folder是否有写入权限,如果是系统保护目录,可能需要调整路径或权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:50:11