我在使用 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
此问题。