unoconv 在 python 中不起作用

unoconv 在 python 中不起作用

我在使用 unoconv 将文档从 Python 脚本转换为 html 时遇到问题。

当我以 root 身份运行脚本或 unoconv 命令时,它运行正常,但当我以其他用户身份执行相同操作时,它失败了。我已通过 apt-get install 安装了 Ubuntu 13.04 Server 和 unoconv 包。我以普通用户(非 root)身份执行了 python 脚本

>>> from subprocess import call
>>> call(["unoconv","-f","html","-o","/var/www/project/tagging/templates/documents","/var/www/project/media/resume1.doc"])
Error: Unable to connect or start own listener. Aborting.

ls -l给出以下内容:

ubuntu@ip-54-194-10-89:/var/www$ ls -l
total 183184
drwxr-xr-x 24 www-data www-data      4096 Aug 31 15:20 project

项目拥有群组和所有权为 www-data

如果有人能帮助我解决这个问题我将不胜感激。

答案1

在做这件事之前您需要启动 unoconv 监听器然后它才会启动。使用 CTRL++打开终端并启动监听器ALTT

unoconv --listener

然后再次尝试转换操作。

笔记:确保没有其他进程使用监听器,如果有任何进程使用监听器,则终止该进程以将监听器分配给当前转换。

希望有帮助。

答案2

如果你从 Python 调用,这是一个更简单的解决方案:

import os
import subprocess

# Copy the environment, and add home to the enviornment
env = os.environ.copy()
env['HOME'] = '/tmp'

p = subprocess.Popen(["unoconv","-f", "html", "-o", "output.html", 
   "input1.doc"], env = env)
out, err = p.communicate()

问题是 unoconv 需要一个可写的 HOME 目录才能启动侦听器。当您从 django 调用时,该 HOME 目录未设置。手动设置可解决/tmp此问题。

相关内容