2010-03-18 3 views
9

Ich muss dieses Skript aus meinem Python-Skript ausführen.Wie kann ich eine ausführbare Datei aus dem Python-Skript aufrufen?

Ist es möglich? Das Skript generiert einige Ausgaben mit einigen Dateien, die geschrieben werden. Wie greife ich auf diese Dateien zu? Ich habe versucht mit Unterprozessaufruffunktion aber ohne Erfolg.

Die Anwendung "bar" verweist auch auf einige Bibliotheken, es erstellt auch die Datei "bar.xml" neben der Ausgabe. Wie bekomme ich Zugriff auf diese Dateien? Einfach mit open()?

Danke,

Edit:

Der Fehler von Python-Laufzeit ist nur diese Zeile.

$ python foo.py 
bin/bar: bin/bar: cannot execute binary file 
+1

Subprozess ist, was Sie brauchen, können Sie ein Beispiel geben, damit wir eine bessere Idee haben, warum es nicht funktioniert hat? –

+0

"Unterprozessaufruf"? Was ist das? Bitte poste den Code, den du benutzt hast und den Fehler, den du tatsächlich bekommen hast. –

+0

Ja, er spricht von der "Call" -Funktion im Standardmodul "Subprocess", was der bessere Weg ist, dies zu tun, obwohl os.system je nach seinen Bedürfnissen angemessen sein kann. –

Antwort

23

Für das externe Programm ausgeführt wird, dies tun:

import subprocess 
args = ("bin/bar", "-c", "somefile.xml", "-d", "text.txt", "-r", "aString", "-f", "anotherString") 
#Or just: 
#args = "bin/bar -c somefile.xml -d text.txt -r aString -f anotherString".split() 
popen = subprocess.Popen(args, stdout=subprocess.PIPE) 
popen.wait() 
output = popen.stdout.read() 
print output 

Und ja, vorausgesetzt, Ihr bin/bar Programm einige verschiedene andere Dateien auf die Festplatte geschrieben, können Sie sie wie gewohnt mit open("path/to/output/file.txt") öffnen. Beachten Sie, dass Sie sich nicht auf eine Subshell verlassen müssen, um die Ausgabe in eine Datei auf dem Datenträger namens "output" umzuleiten, wenn Sie dies nicht möchten. Ich zeige hier, wie man die Ausgabe direkt in Ihr Python-Programm einliest, ohne dazwischen auf die Festplatte zu gehen.

+0

Hallo Peter, es gibt den Fehler: bin/bar: bin/bar: kann keine Binärdatei und keine anderen Informationen aus der Python-Laufzeit ausführen. Was ist die Ursache? –

+0

handelt es sich um den Fehler der ausführbaren Datei. Ich habe es gelöst, danke Peter. –

11

Der einfachste Weg ist:

import os 
cmd = 'bin/bar --option --otheroption' 
os.system(cmd) # returns the exit status 

Sie Zugriff auf die Dateien, auf die übliche Art und Weise, durch open() verwenden.

Wenn Sie kompliziertere Unterprozessverwaltung durchführen müssen, dann ist das Modul subprocess der richtige Weg.

Verwandte Themen