Hallo zusammen
Ich sollte zwei Python Programme verknüpfen. Das eine wurde in Python 2 geschrieben, das andere in Python 3.
So wie ich es jetzt sehe bleibt mir keine andere Möglichkeit, als eine Art Hauptskript zu schreiben (in Python 3), welches immer wieder "os.system('python2.4 test24.py')" Calls enthält.
Gibt es eine professionelle, saubere Lösung dafür? Umschreiben des einen Programms wird leider nicht möglich sein..
Besten Dank für Hinweise.
Python2 und Python3
[url=http://www.proandkon.com]proandkon.com[/url]
@mzh: Professioneller und sauberer ist auf jeden Fall erst einmal das `subprocess`-Modul statt `os.system()`.
Dann ist die Frage ob es sich vielleicht auch lohnt das andere Skript als Service zu schreiben, der am Anfang gestartet wird und dann mit einem RPC-Mechanismus aufzurufen.
Dann ist die Frage ob es sich vielleicht auch lohnt das andere Skript als Service zu schreiben, der am Anfang gestartet wird und dann mit einem RPC-Mechanismus aufzurufen.
ok, ich schau mir gerade das subprocess modul an.
Was ich mich gefragt habe ist, ob es evtl. irgendwie möglich sein sollte so was wie
so zu schreiben, dass foo mit Python 2.X und goo mit Python 3.X ausgeführt wird.
Was ich mich gefragt habe ist, ob es evtl. irgendwie möglich sein sollte so was wie
Code: Alles auswählen
#!/usr/bin/env python
def foo():
print "bar"
def goo():
print("gar")
[url=http://www.proandkon.com]proandkon.com[/url]
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wie sollte das gehen? Der jeweilige Interpreter liest ja immer die ganze Datei ein und nicht nur Stücke, die grad mal für ihn wie gültiger Code aussehen. Insofern wird der Python3 Interpreter das "print 'bar'" als syntaktischen Fehler ansehen.mzh hat geschrieben: Was ich mich gefragt habe ist, ob es evtl. irgendwie möglich sein sollte so was wieso zu schreiben, dass foo mit Python 2.X und goo mit Python 3.X ausgeführt wird.Code: Alles auswählen
#!/usr/bin/env python def foo(): print "bar" def goo(): print("gar")
Du könntest aber überlegen, ob man das Programm mit geringem Aufwand von 2.4 auf 3.2 portieren kann? Immerhin existiert ja 2to3. Vielleicht ist das auf Dauer der beste Weg.
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
schon klar.
Trotzdem dachte ich mir, dass sich die Funktion evtl. als Python 2.x oder Python 3.x tauglich "markieren" lässt und der Interpreter dann entsprechend handelt.
Konvertieren ist leider keine Option, das Python 2.x Programm benötigt Numpy.
Trotzdem dachte ich mir, dass sich die Funktion evtl. als Python 2.x oder Python 3.x tauglich "markieren" lässt und der Interpreter dann entsprechend handelt.
Konvertieren ist leider keine Option, das Python 2.x Programm benötigt Numpy.
[url=http://www.proandkon.com]proandkon.com[/url]
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hat numpy nicht schon Python3-Support? Linkmzh hat geschrieben: Konvertieren ist leider keine Option, das Python 2.x Programm benötigt Numpy.
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
Spannend.
Ich hab nur http://new.scipy.org/faq.html#does-nump ... bout-scipy geachtet.
Trotzdem, ungeachtet des konkreten Problems hier, die oben genannte "Markierung" ist nicht etwas was man machen kann, bzw. wofür es eine empfohlene Lösung gibt.
Ich hab nur http://new.scipy.org/faq.html#does-nump ... bout-scipy geachtet.
Trotzdem, ungeachtet des konkreten Problems hier, die oben genannte "Markierung" ist nicht etwas was man machen kann, bzw. wofür es eine empfohlene Lösung gibt.
[url=http://www.proandkon.com]proandkon.com[/url]
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Naja, Du müsstest eben die beiden Interpreter anfassen und deren Parsing-Routinen entsprechend anpassenmzh hat geschrieben: Trotzdem, ungeachtet des konkreten Problems hier, die oben genannte "Markierung" ist nicht etwas was man machen kann, bzw. wofür es eine empfohlene Lösung gibt.
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
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nun, du kannst Versionsweichen benutzen und die versionsspezifischen Sachen in verschiedene Module packen. Oder in verschiedene Ordner mitdemselben Namen und den Import-Path veraendern.
Ok, ich glaub ich muss mich jetzt erstmal waschen. Ich fuehl mich schmutzig.
Ok, ich glaub ich muss mich jetzt erstmal waschen. Ich fuehl mich schmutzig.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
goodi.
ich schaus mir an.
ich schaus mir an.
[url=http://www.proandkon.com]proandkon.com[/url]
wieso?BlackJack hat geschrieben:@mzh: Professioneller und sauberer ist auf jeden Fall erst einmal das `subprocess`-Modul statt `os.system()`.
[url=http://www.proandkon.com]proandkon.com[/url]
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Weil das subprocess-Modul u.a. alle vorherigen Ansätze von Systemaufrufen in ein Modul und eine API integriert.mzh hat geschrieben:wieso?BlackJack hat geschrieben:@mzh: Professioneller und sauberer ist auf jeden Fall erst einmal das `subprocess`-Modul statt `os.system()`.
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
@hyperion: Aha. Danke.
[url=http://www.proandkon.com]proandkon.com[/url]