gpt4 book ai didi

python - 在 python 中使用 soffice,Command 在终端中工作,但在 Python 子进程中不工作

转载 作者:行者123 更新时间:2023-11-28 16:24:23 25 4
gpt4 key购买 nike

我遇到了 Python 中 libreoffice 最令人沮丧的问题

当我在终端中运行以下命令时,我完全没有问题,pdf 文件在我想要的地方生成,生活很美好:

cd /Applications/LibreOffice.app/Contents/MacOS/

./soffice --convert-to pdf --outdir {output_folder} {path_to_docx_file}/{title}.docx

但是,当我尝试将它添加到我的 python 脚本时:

SOFFICE = r'/Applications/LibreOffice.app/Contents/MacOS/soffice'

subprocess.Popen([SOFFICE, "--convert-to", "pdf", "--outdir", "{output_folder} ", "{path_to_docx_file}/{title}.docx"])

我收到一条错误消息:

Error: source file could not be loaded

我已经尝试打开所有二进制文件和文件的所有权限,但这在 python 脚本中仍然不起作用。我究竟做错了什么?

最佳答案

这是因为您需要更改当前工作目录,而不仅仅是给命令一个绝对路径。

subprocess.Popen(["/Applications/LibreOffice.app/Contents/MacOS/soffice", "--convert-to", "pdf", "--outdir", "{output_folder} ", "{path_to_docx_file}/{title}.docx"])

应替换为:

subprocess.Popen(["soffice", "--convert-to", "pdf", "--outdir", "{output_folder} ", "{path_to_docx_file}/{title}.docx"], cwd="/Applications/LibreOffice.app/Contents/MacOS/")

即使它看起来很相似,这两个调用之间还是有一个主要区别:当前工作目录。

使用脚本:

subprocess.Popen(["/Applications/LibreOffice.app/Contents/MacOS/soffie", "--convert-to", "pdf", "--outdir", "{output_folder} ", "file.docx"])

如果您在 ~ 目录中调用 python 脚本,它将尝试访问 ~/file.docx。

但是,在第二个中:

subprocess.Popen(["soffice", "--convert-to", "pdf", "--outdir", "{output_folder} ", "file.docx"], cwd="/Applications/LibreOffice.app/Contents/MacOS/")

它将尝试访问“/Applications/LibreOffice.app/Contents/MacOS/file.docx”中的文件,这与您使用 cd 所做的行为相同。命令(实际上,cd 命令会更改当前目录,因此提供 cwd 参数与进行 cd 调用相同)。

您可以也可以对所有文件使用绝对路径,它也可以解决问题,但这不是您想要做的。这取决于您尝试构建的软件及其用途。

这就是为什么提示说文件不存在的原因。程序在 WHERE_YOU_CALL_THE_SCRIPT/{path_to_docx_file}/{title}.docx 中找不到文件因为我想文件在 /Applications/LibreOffice.app/Contents/MacOS/{path_to_docx_file}/{title}.docx 中.

关于python - 在 python 中使用 soffice,Command 在终端中工作,但在 Python 子进程中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37772250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com