utilizzando subprocess.Popen in pitone con il file os.tmp passando in parametri opzionali
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.
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()