utilizando subprocess.Popen en python con el archivo os.tmp bajo introducción de parámetros opcionales

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

  •  29-09-2019
  •  | 
  •  

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.

¿Fue útil?

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top