Verwendung in Python mit os.tmp Datei subprocess.Popen während in optionale Parameter übergeben

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

  •  29-09-2019
  •  | 
  •  

Frage

Ich bin ein Python-Programm in Linux zu schreiben und in einem Teil davon laufe die pdftotext ausführbaren einen pdf Text zu konvertieren. Der Code, den ich zur Zeit benutze ist unten angegeben.

pdfData = currentPDF.read()

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

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

Das funktioniert gut, aber jetzt möchte ich die pdftotext ausführbare Datei mit der Option -layout laufen (Konserven Layout-Dokument). Ich habe versucht, das zu ersetzen „-“ mit Layout ersetzen „pdftotext“ mit „pdftotext -layout“ usw. Nichts davon funktioniert. Sie alle geben mir einen leeren Text. Da der Eingang in über die temporäre Datei geleitet wird, habe ich Probleme figureing aus der Argumentliste. Der größte Teil der Dokumentation auf Popen übernimmt alle Parameter in durch die Argumentliste übergeben werden, aber in meinem Fall die Eingabe wird in durch die temporäre Datei übergeben.

Jede Hilfe würde sehr geschätzt werden.

War es hilfreich?

Lösung

Dies funktioniert für mich:

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

Obwohl ich nicht explizite Bestätigung in der Manpage finden könnte, glaube ich, die erste - pdftotext sagt PDF-file zu erwarten, von stdin zu kommen, und der zweiten - sagt pdftotext zu erwarten text-file an stdout gesendet werden.

Andere Tipps

Sie können den vollständigen Befehl in Zeichenfolge mit Shell weitergeben = True:

out, err = subprocess.Popen('pdftotext -layout - -', shell=True, stdin=tf, stdout=subprocess.PIPE).communicate()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top