2017-11-12 2 views
0

Hallo Ich fange gerade an, Python-Skripte zu verwenden, um ausführbare Dateien auszuführen. Was ich will ist im Grunde tun Verwendung Python eine input.dat Datei und starten Sie eine ausführbare Meinedat die input.dat als Eingangsparameter bearbeiten nimmt und speichert die Ergebnisse aus der Ausgabe result.dat Datei irgendwo und läuft das ganze in einer Schleife zum Variieren input.datWie kann ich eine ausführbare Datei mit Python-Skript ausführen, geben Sie eine .dat-Datei als Eingabe?

Ich habe den Bearbeitungsteil herausgefunden, aber der laufende und das Nehmen des Eingangsteils ist, was ich nicht scheinen kann, herauszufinden.

Auf dem Terminal würde es aussehen

sudo ./myfile < input.dat 
+0

Sie starten können eine ausführbare mit Python, um etwas in der Befehlszeile (oder was auch immer es in Linux genannt) zu starten, und ich denke, einfach 'time.sleep' verwenden, um sicherzustellen, dass die ausführbare Datei die Verarbeitung abgeschlossen hat, bevor result.dat lesen – Peter

+0

okay, so habe ich versucht mit Subprozess. Popen (Pathomyfile) ', stdin =' pathtoinput.dat ', stdout = None) und es scheint zu funktionieren (vorerst). Problem ist, dass die ausführbare Datei in Fortran läuft, also muss ich explizit bestimmte Ausgabedateien als 'schreibbar' in Python öffnen (glaube ich) – insonaria

+0

Ich bin nicht auf Linux und habe selten das Subprozessmodul benutzt, so Angst, dass ich nicht viel werde Hilfe lol. Einfach weiter googeln, bis etwas funktioniert :) – Peter

Antwort

2

Sie subprocess.run() verwenden könnte den Befehl mit Eingabe aus einer Datei und leitet seine Ausgabe in eine andere Datei auszuführen:

import subprocess 

for filename in 'input.dat', 'otherinput.dat', 'moreinput.dat': 
    with open(filename) as infile, open('result_{}'.format(filename), 'w') as outfile: 
     result = subprocess.run(['sudo', 'myfile'], stdin=infile, stdout=outfile) 
+0

Ich bin nicht sicher, ob ich im vorherigen Kommentar klar war, ich habe tatsächlich den Pfad übergeben und nicht nur den Dateinamen! (Es scheint so weit zu funktionieren) Vielen Dank! – insonaria

+0

@insonaria: Nun, es ist einfach genug, die Dateinamen zu ändern, um den Pfad einzuschließen, oder 'os.path.join()' zu verwenden, um den vollständigen Pfadnamen vor dem Aufruf von 'open()' zu erstellen. – mhawke

Verwandte Themen