en utilisant subprocess.Popen en python avec le fichier os.tmp en passant dans les paramètres facultatifs
Question
Je suis en train d'écrire un programme Python sous Linux et en partie en cours d'exécution de l'exécutable pdftotext pour convertir un texte en pdf. Le code J'utilise actuellement est donnée ci-dessous.
pdfData = currentPDF.read()
tf = os.tmpfile()
tf.write(pdfData)
tf.seek(0)
out, err = subprocess.Popen(["pdftotext", "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()
Cela fonctionne très bien, mais maintenant je veux lancer l'exécutable pdftotext avec l'option -layout (conserves mise en page du document). J'ai essayé de remplacer le « - » avec la mise en page, en remplaçant « pdftotext » par « pdftotext -layout », etc. Rien de tout cela fonctionne. Ils me donnent un texte vide. Depuis l'entrée est canalisée via le fichier temporaire, j'ai figureing mal à la liste des arguments. La plupart des documents sur Popen assume tous les paramètres sont passés dans la liste des arguments, mais dans mon cas, l'entrée est transmis à travers le fichier temporaire.
Toute aide serait grandement appréciée.
La solution
Cela fonctionne pour moi:
out, err = subprocess.Popen(
["pdftotext", '-layout', "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()
Bien que je ne pouvais pas trouver confirmation explicite dans la page de manuel, je crois que le premier -
dit pdftotext
à attendre PDF-file
venir de stdin, et le second -
dit pdftotext
d'attendre text-file
à envoyer à stdout.
Autres conseils
Vous pouvez passer la commande complète dans la chaîne avec shell = true:
out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()