utilizando subprocess.Popen en python con el archivo os.tmp bajo introducción de parámetros opcionales
Pregunta
Estoy escribiendo un programa Python en Linux y en la parte de ella que ejecuta el ejecutable pdftotext para convertir un texto en pdf. El código que estoy usando actualmente es la siguiente.
pdfData = currentPDF.read()
tf = os.tmpfile()
tf.write(pdfData)
tf.seek(0)
out, err = subprocess.Popen(["pdftotext", "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()
Esto funciona bien, pero ahora quiere correr el ejecutable pdftotext con la opción -layout (Preserva el diseño del documento). He intentado sustituir el "-" con la disposición, en sustitución de "pdftotext" con "pdftotext -layout", etc. Nada de esto funciona. Todos ellos me dan un texto vacío. Dado que la entrada está siendo canalizado a través del archivo temporal, estoy teniendo problemas para figureing la lista de argumentos. La mayor parte de la documentación sobre Popen asume toda se están pasando a través de los parámetros en la lista de argumentos, pero en mi caso se está pasando a través de la entrada en el archivo temporal.
Cualquier ayuda sería muy apreciada.
Solución
Esto funciona para mí:
out, err = subprocess.Popen(
["pdftotext", '-layout', "-", "-"], stdin = tf, stdout=subprocess.PIPE ).communicate()
A pesar de que no podía encontrar la confirmación explícita en la página del manual, creo que la primera -
dice pdftotext
esperar PDF-file
venir de la entrada estándar, y la segunda -
dice pdftotext
esperar text-file
que se enviará a la salida estándar.
Otros consejos
Se puede pasar el control total de la cadena con la cáscara = true:
out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()