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?
Non-Python-Programm in Python ausführen lassen
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Das subprocess-Modul
`execfile` ist fuer Python-Module gedacht - und ist ausserdem nicht mehr in Python3 dabei.
`execfile` ist fuer Python-Module gedacht - und ist ausserdem nicht mehr in Python3 dabei.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 25
- Registriert: Sonntag 31. Oktober 2010, 14:31
Ich habe selber eine Lösung gefunden:
import os
result = os.system('programmname /pfad')
Damit hat sich mein Problem erledigt.
import os
result = os.system('programmname /pfad')
Damit hat sich mein Problem erledigt.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Die ist aber nicht gut; Gründe stehen in der Doku zu os.system()!kleiner.epsilon hat geschrieben:Ich habe selber eine Lösung gefunden:
import os
result = os.system('programmname /pfad')
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 25
- Registriert: Sonntag 31. Oktober 2010, 14:31
@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.
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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!).
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!).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- noisefloor
- User
- Beiträge: 3858
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
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
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.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.
Da bietet sich auch F2PY an, das mit NumPy kommt.noisefloor hat geschrieben:oder so: http://sourceforge.net/projects/pyfortran/
Grüße
Gerrit