utilizzando subprocess.Popen in pitone con il file os.tmp passando in parametri opzionali

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

  •  29-09-2019
  •  | 
  •  

Domanda

Sto scrivendo un programma di pitone in Linux e in parte di esso in esecuzione l'eseguibile pdftotext per convertire un testo in pdf. Il codice Attualmente sto usando è riportata qui sotto.

pdfData = currentPDF.read()

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

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

Questo funziona bene, ma ora voglio eseguire il file eseguibile pdftotext con l'opzione -layout (mantiene il layout del documento). Ho provato a sostituire il "-" con il layout, sostituendo "pdftotext" con "pdftotext -layout", ecc Niente di tutto questo funziona. Mi hanno tutti danno un testo vuoto. Dal momento che l'ingresso viene convogliata in via del file temporaneo, Sto avendo difficoltà figureing fuori la lista degli argomenti. La maggior parte della documentazione sulla Popen assume i parametri vengono passati attraverso la lista degli argomenti, ma nel mio caso l'input viene passato attraverso il file temporaneo.

Qualsiasi aiuto sarebbe molto apprezzato.

È stato utile?

Soluzione

Questo funziona per me:

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

Anche se non ho potuto trovare conferma esplicita nella pagina man, credo che la prima - dice pdftotext aspettarsi PDF-file venire da stdin, e la seconda - dice pdftotext aspettarsi text-file da inviare allo stdout.

Altri suggerimenti

È possibile passare il comando completo nella stringa con Shell = true:

out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top