Ich muss ein Linux-Befehlszeilenprogramm von ausführenPython. Die Eingabe in die Befehlszeile ist ein Pfad und Dateiname einer Datendatei. Es gibt buchstäblich Tausende dieser Befehle, die ausgeführt werden müssen, und ich muss zuerst die Datendatei aus einem Prozess in Python erstellen. Die Ausgabe des Befehlszeilenprogramms muss auch von Python gelesen werden. Es wäre so viel einfacher (und in Anbetracht der Lese- und Schreibzeit von Dateien schneller), den Dateinamen irgendwie durch den tatsächlichen Inhalt zu ersetzen und die Ausgabe, die eine Ausgabedatei ist, direkt in einen Python-String zu lesen, ohne dass ein Zugriff auf die Diskette erforderlich ist. Ist das möglich und wie kann dies umgesetzt werden?
Vorstellen:
$ command < infilename > outfilename
oder
$ command --infile filename --outfile filename
ersetzt durch
$ command < {infile content} > {outfile content}
in der Kommandozeile oder etwas Ähnlichem in Python.
Antworten:
0 für die Antwort № 1Verwenden des Subprozess-Moduls in Python. Die Lösung war wie folgt, wo Befehl und txt_inp ersetzt werden können. txt_inp ist der Textinhalt des obigen Dateinamens:
import subprocess
txt_inp = "some text as input"
process = subprocess.Popen("command", stdin=subprocess.PIPE, stdout=
subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
t_arr, t_err = process.communicate(input=txt_inp)
t_arr und t_err sind die zurückgegebenen stdout und stderr. t_arr kann in einer Datei namens outfilename gespeichert werden, die das folgende Beispiel vervollständigen würde:
command < infilename > outfilename