当前位置: 首页 > 知识库问答 >
问题:

LibreOffice convert.docx到.pdf并行运行不正常

司徒俊健
2023-03-14

我有很多docx文件要转换成pdf。逐个转换它们需要很长时间。因此,我编写了一个python脚本来并行转换它们:

from subprocess import Popen
import time
import os

os.chdir(os.path.dirname(__file__))

output_dir = './outputs'
source_file_format = './docs/example_{}.docx'

po_list = [Popen(
    f"/Applications/LibreOffice.app/Contents/MacOS/soffice --invisible --convert-to pdf --outdir {output_dir} {source_file_format.format(i)}",
    shell=True)
    for i in range(0, 7, 1)]

while po_list:
    time.sleep(0.01)
    for i, p in enumerate(po_list):
        status = p.poll()
        if status is None:
            continue
        elif status == 0:
            print('Succeed: [{}] {} -> {}'.format(p.returncode, p.stderr, p.args))
            po_list.remove(p)
        else:
            print('Failed: {} : {}'.format(p.args, p.poll()))
            po_list.remove(p)

但是每次我运行这个脚本时,只有一部分docx文件被成功转换。rest转换进程甚至不会抛出任何错误信息。

共有1个答案

姬实
2023-03-14

我们也在同一个问题上纠缠了一段时间。

LibreOffice的多个实例使用一个UserInstallation目录共享同一个空间,因此并行转换在这里产生了一个问题(间歇过程似乎混淆了)。

为libre的每个实例使用不同的目录有助于解决这个问题。您可以通过UserInstallation env变量来实现这一点,该变量可以作为:“-env:UserInstallation”传递=file:///d:/tmp/p0/"

您可以通过在目录中附加循环变量或任何唯一标识符来自动执行此操作。

参考:https://ask.libreoffice.org/en/question/42975/how-can-i-run-multiple-instances-of-sofficebin-at-a-time/

 类似资料:
  • 我有超过50种不同类型的输入,我在功能文件中的Example关键字下定义了这些输入,执行这些输入需要花费更多的时间。有没有办法并行运行这些输入?。我不想让任何人来测试这种方法。请帮忙。

  • 问题内容: 我有要并行处理的元素的集合。当我使用时,并行性有效。但是,当我使用时,它不会并行运行。 我写了一个代码样本来说明问题: 这是我在Windows 7上获得的输出 我们可以看到中的第一个元素必须在处理第二个元素之前完成。对于,第二个元素在第一个元素结束之前开始。 您能否告诉我是什么原因导致此问题,以及如何使用集合避免发生此问题? 问题答案: 我可以重现您看到的行为,其中并行性与您指定的fo

  • 问题内容: 我正在尝试使用Mongoid / DeviseRails3.1模板(Mongoid_和Devise),并且不断收到错误消息,指出ExecJS无法找到JavaScript运行时。当我没有安装任何东西时,这还算公平,但是我尝试安装Node.js,Mustang和RubyRacer,但是没有任何效果。 我找不到JavaScript运行时。有关可用运行时的列表,请参见sstephenson /

  • 我在尝试导出独立应用程序时遇到问题。 当我使用eclise执行它时,它运行正常,但当我试图导出到可运行的jar时,它会给我一些错误。 我的坚持。xml看起来像 它位于src/META-INF/persistence。xml 从终端运行时得到的堆栈跟踪是: 在爪哇。朗,反思一下。方法在组织中调用(未知源)。日食jdt。内部的jarinjarloader。罐式装载机。main(jarsrcloader