appelant pdftotext du script python ne fonctionne pas lorsque je change de machine locale à mon hébergement Web

StackOverflow https://stackoverflow.com/questions/4837114

Question

J'ai écrit un petit script python à info parse / extrait d'un PDF. Je l'ai testé sur ma machine locale, je python 2.6.2 et la version 0.12.4 pdftotext.

Je suis en train de l'exécuter sur mon serveur d'hébergement Web (de dreamhost). Il a la version python et la version 2.5.2 pdftotext 3,02.

Mais quand je tente d'exécuter le script que je reçois l'erreur suivante à la ligne de pdftotext (je l'ai vérifié avec un simple jeter script bien) « Erreur: Impossible d'ouvrir le fichier « - » »

def ConvertPDFToText(currentPDF):
    pdfData = currentPDF.read()

    tf = os.tmpfile()
    tf.write(pdfData)
    tf.seek(0)

    if (len(pdfData) > 0) :
        out, err = subprocess.Popen(["pdftotext", "-layout", "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()
        return out
    else :
        return None

Notez que je passe cette fonction, le même fichier PDF et il ne y avoir accès. Dans une autre fonction que je peux me envoyer un courriel le document PDF à partir du même script en cours d'exécution sur le webhost.

Qu'est-ce que je fais mal? Quelle est la différence possible dans l'utilisation des sous-processus / python / pdftext entre ma version locale et la version webhost? Je suppose que je vais devoir modifier la commande, de sorte que toute aide serait grandement appréciée.

Merci à l'avance.

Était-ce utile?

La solution

peut le lire pdftotext de la ligne de commande directement sur webhost? Pouvez-vous vérifier? De plus, pourquoi ne passez-vous pas le nom du fichier temporaire comme un argument plutôt que de lui donner sur l'entrée standard? (Repasting ici selon votre suggestion).

Autres conseils

L'indice de la réponse réside dans le commentaire de Noufal, d'utiliser le nom du fichier. Mais le os.tmpfile () ne dispose pas d'un nom de fichier. Je devais utiliser un autre module. Le code modifié est donné ci-dessous.

#import tempfile
def ConvertPDFToText(currentPDF):
    pdfData = currentPDF.read()

    tf = tempfile.NamedTemporaryFile()
    tf.write(pdfData)
    tf.seek(0)

    outputTf = tempfile.NamedTemporaryFile()

    if (len(pdfData) > 0) :
        out, err = subprocess.Popen(["pdftotext", "-layout", tf.name, outputTf.name ]).communicate()
        return outputTf.read()
    else :
        return None

Je ne sais pas vraiment comment donner le commentaire de Noufal points pour cette réponse si. Peut-être qu'il peut couper et coller cette réponse?

If you have shell access to the server, try to run without Python:

# pdftotext -layout - -

and:

# pdftotext -layout

Some versions of pdftotext may use stdi/stdout then run without any files in command line. Try

    out, err = subprocess.Popen(["pdftotext", "-layout"], stdin = tf, stdout=subprocess.PIPE ).communicate()

Or use temp file as suggested by Noufal Ibrahim.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top