Verwendung in Python mit os.tmp Datei subprocess.Popen während in optionale Parameter übergeben
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.
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()