web-dev-qa-db-fra.com

Unoconv ne fonctionne pas dans python

Un problème rencontré lors de l'utilisation de la commande unoconv pour convertir des documents en HTML à partir d'un script Python.

Cela fonctionne parfaitement lorsque je lance le script ou les commandes unoconv en tant que root, mais il échoue lorsque je fais de même avec un autre utilisateur. J'avais installé Ubuntu 13.04 Server et des paquets unoconv via apt-get install. J'ai exécuté le script python en tant qu'utilisateur ordinaire (et non root)

>>> 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 donnez ce qui suit:

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

le projet a un groupe et une propriété en tant que www-data

Si quelqu'un pouvait m'aider avec ce problème, ce serait apprécié.

5
Karthik

Avant de faire cela vous devez démarrer l'écouteur unoconv alors seulement il commencera. ouvrez votre terminal avec CTRL+ALT+Tet lancez l'auditeur en tant que

unoconv --listener

Puis réessayez avec votre opération de conversion.

NOTE: assurez-vous qu'aucun autre processus n'utilise l'écouteur. Si un processus le fait, supprimez ce processus pour affecter l'écouteur à la conversion en cours.

j'espère que ça t'as aidé.

4
rɑːdʒɑ

Si vous appelez de Python, voici une solution plus simple:

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()

Le problème est qu’unoconv a besoin d’un répertoire HOME en écriture pour démarrer le programme d’écoute. Lorsque vous appelez depuis Django, ce répertoire personnel n'est pas défini. Le régler manuellement sur /tmp résout ce problème.

0
speedplane