Gibt es einen Write und Read Befehl für Bytecode?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Habe einen .pyc file mit read() reingelesen und erhalte bei Ausführung mit eval folgende Fehlermeldung

TypeError: source code string cannot contain null bytes

Dann wollte ich es anders versuchen und habe Python Code mit compile compiliert und wollte ihn dann mit write() in einen File schreiben.
Da bekomme ich aber dann diese Fehlermeldung:

TypeError: 'code' does not support the buffer interface
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Hab die Lösung selber gefunden. Wenn man compilierten Code mit marshal.dump in ein File schreibt, kann man ihn mit marshal.load wieder laden und dann mit eval ausführen.
Das mit den pyc Files allerdings funktioniert nicht.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Es gibt quasi keine Garantie für was in einer pyc Datei drin ist. Du kannst dich nicht darauf verlassen dass eine pyc Datei mit unterschiedlichen Interpretern oder unterschiedlichen Versionen eines Interpreters funktioniert. PyPy hat z.B. Bytecode Operationen die CPython nicht hat.

Was auch immer du mit pyc Dateien veranstaltest, du solltest es sein lassen es sei den du betreibst Bebugging oder du willst nur Spielereien machen.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Und Python-Bytecode zur Obfuskation zu nutzen ist auch sinnlos, da mehrere Decompiler existieren.
the more they change the more they stay the same
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Überhaupt ist das ganze Vorgehen - mit Verlaub - Schwachsinn.

Ich glaube ja inzwischen, dass das nur Rumgetrolle ist.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

sparrow hat geschrieben:Überhaupt ist das ganze Vorgehen - mit Verlaub - Schwachsinn.

Ich glaube ja inzwischen, dass das nur Rumgetrolle ist.
Deine Etikettierungen, Vorurteile und Bemerkungen über Rumgetrolle kannst Du Dir sparen. Es handelte sich um eine ernsthafte Überlegung, ob man dynamisch geladene Anwendungen, also das was man normalerweise tut mit:

Code: Alles auswählen

python myprogram.py
ob man das eventuell cached. Also cachen ließe es sich, sowohl im Hauptspeicher als auch in einem cache Directory, so wie es python etwa bei importierten Modulen tut. Da aber die Quellen dieser Programme unbestimmt sind und aus verschiedenen Verzeichnissen kommen könnten, oder aus Datenbanken, oder über das Internet, wäre eine Verwaltung der Quellangaben schwierig. Und python cached auch keine Anwendungen sondern nur importierte Module. Bei einem Aufruf mit python myprogram.py wird jedesmal diese Datei neu kompiliert. Und genau das werde ich auch tun und auf cachen verzichten.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@Alfons Mittelmeyer: Du steckst viel zu viel Energie in Vorüberlegungen!

Mach erstmal und kümmere dich um Probleme, wenn sie wirklich auftreten.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

jens hat geschrieben:@Alfons Mittelmeyer: Du steckst viel zu viel Energie in Vorüberlegungen!

Mach erstmal und kümmere dich um Probleme, wenn sie wirklich auftreten.
Bevor man etwas implementiert, sollte man sich vorher überlegen ob es geht und ob man es braucht. Wenn man es implementiert hat und es gibt dann Probleme und man dann feststellt, dass man es eigentlich gar nicht braucht, dann hat man Zeit vergeudet. Also sollte man voher wissen, was man implementieren will und was nicht.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Alfons Mittelmeyer: nicht was man implementieren will, sondern man sollte überlegen, was das Ziel ist, und wie man es erreichen könnte. Dazu schaut man sich an, ob man das Ziel über Standardmittel erreichen kann und ja man kann Code ausführen, in dem man ihn imporiert. Ansonsten verweise ich Dich nochmal auf YAGNI.
Antworten