en utilisant subprocess.Popen en python avec le fichier os.tmp en passant dans les paramètres facultatifs

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

  •  29-09-2019
  •  | 
  •  

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.

Était-ce utile?

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top