Seite 1 von 1

Non-Python-Programm in Python ausführen lassen

Verfasst: Sonntag 31. Oktober 2010, 14:52
von kleiner.epsilon
Hallo,

ich möchte in Python ein Programm aufrufen und ausführen lassen.
Habe es mit execfile probiert, aber es funktioniert nicht.

Genauer: das Programm1 selbst erzeugt Zufallszahlen und speichert sie in einer Datei1.
Programm2 liest die Daten aus der Datei1 ein, verwendet sie und gibt andere Zahlen in einer Datei2 wieder aus.
Ich möchte diesen Vorgang in einer Schleife mehrmals ausführen lassen.
Aber es happert schon an dem Aufruf des Programms (das ist selbst in Fortran geschrieben).

Hat mir jemand Tipps, was ich noch ausprobieren kann?

Re: Non-Python-Programm in Python ausführen lassen

Verfasst: Sonntag 31. Oktober 2010, 14:57
von cofi
Das subprocess-Modul

`execfile` ist fuer Python-Module gedacht - und ist ausserdem nicht mehr in Python3 dabei.

Re: Non-Python-Programm in Python ausführen lassen

Verfasst: Sonntag 31. Oktober 2010, 16:25
von kleiner.epsilon
Ich habe selber eine Lösung gefunden: :)

import os
result = os.system('programmname /pfad')

Damit hat sich mein Problem erledigt.

Re: Non-Python-Programm in Python ausführen lassen

Verfasst: Sonntag 31. Oktober 2010, 17:41
von Hyperion
kleiner.epsilon hat geschrieben:Ich habe selber eine Lösung gefunden: :)

import os
result = os.system('programmname /pfad')
Die ist aber nicht gut; Gründe stehen in der Doku zu os.system()!

Re: Non-Python-Programm in Python ausführen lassen

Verfasst: Sonntag 31. Oktober 2010, 18:04
von kleiner.epsilon
@Hyperion:
ich habe mir die Doku zu os.system jetzt mehrmals durchgelesen, und auch verstanden, dass es Einschränkungen, Probleme oder sowas geben kann, aber die Bedeutung dessen, oder was das genau heißt, habe ich nicht verstanden. :(

Re: Non-Python-Programm in Python ausführen lassen

Verfasst: Sonntag 31. Oktober 2010, 18:31
von Hyperion
Naja, um es mal flapsig zu sagen: Musst Du ja auch nicht verstehen, da es andere mit Sicherheit durchdacht haben ;-)

Für derartige Dinge ist das subprocess-Modul eben besser geeignet, weil es für alle möglichen Arten von Kommunikation mit dem aufgerufenem Programm ausgelegt ist. Es bietet Dir daher eine einheitliche API und ist universell einsetzbar.

Insofern ist es einfach sinnvoll direkt darauf zu setzen, gleichwohl die Anfangshürde ggf. ein wenig größer ist (Wobei man sich eigentlich auch nur mal die Doku gut angucken muss, um die grundlegenden Dinge zu begreifen; für das Ersetzen von os.system() gibt es ja sogar explizite Beispiele!).

Re: Non-Python-Programm in Python ausführen lassen

Verfasst: Sonntag 31. Oktober 2010, 21:18
von noisefloor
Hallo,

oder so: http://sourceforge.net/projects/pyfortran/

Das Projekt ist zwar nicht mehr ganz frisch, aber die Versionsnummer lässt Stabilität vermuten. ;-)

Gruß, noisefloor

Re: Non-Python-Programm in Python ausführen lassen

Verfasst: Montag 1. November 2010, 08:23
von gkuhl
Hyperion hat geschrieben:Für derartige Dinge ist das subprocess-Modul eben besser geeignet, weil es für alle möglichen Arten von Kommunikation mit dem aufgerufenem Programm ausgelegt ist. Es bietet Dir daher eine einheitliche API und ist universell einsetzbar.
Mit anderen Worten: 'subprocess' ist mächtiger als 'os.system' und kann mehr. Solange dich das aber nicht stört, gibt es keinen Grund 'os.system' nicht zu verwenden. Das es 'subprocess' gibt, sollte man trotzdem im Hinterkopf behalten.
noisefloor hat geschrieben:oder so: http://sourceforge.net/projects/pyfortran/
Da bietet sich auch F2PY an, das mit NumPy kommt.

Grüße
Gerrit