@ ice2k3: Danke für die Links. Wieder etwas dazu gelernt.

Also ich versuche mal in 2-3 Sätzen zusammen zu fassen, was ich gemacht habe.
Es ist eine internetbasierte Anwendung geworden, bei dem verschiedene Themen aus Python3 behandelt werden, ähnlich zum Tutorial evtl. Soweit bin ich noch nicht, aber da steckt schon Wissen aus der Didaktik drin. Zu jeder dieser Einheiten, gibt es eine Aufgabenstellung, bei der der Benutzer irgendwas selber machen muss und die Anwendung das ganze auswertet.
Ich habe also einen Strauß voller Probleme: Django 2.6 <-> Anwendercode 3.x., Überhaupt der Anwendercode an sich, auf einem Server

Umsetzung bisher: Ich schreibe aus Django heraus den Code in ein File und habe in Python3 ein Tool, was das ganze auswertet. Dabei startet Django einen subprocess und wartet auf das Tool.
Erstmal versuche ich einen AST zu bilden, den ich wiederum nach unerlaubten builtins etc. durchsuche. (Ich hab hier schon gelesen, dass es da ganz fiese Möglichkeiten gibt, trotzdem Böse dinge zu tun)
Wenn der AST i.O. ist, dann versuche ich den Code auszuwerten. In dem Code vom Ausgangsposting geschieht das, durch Prüfen des Rückgabewertes. Aber ich merke, wenn da jemand return 45 schreibt, weil ich den AST nach Schlüsselwörtern durchsuche, wie "For" z.B.

Wenn das Auswerten fertig ist, wird ein XML-File zurück geschrieben, in dem die Fehler etc. drin stehen.
Das ist so ganz grob umrissen der jetzige Entwurf. Da stecken einige Probleme drin, aber dafür machen wir das ja, um so was zu lernen.
Und nicht wieder drauf hauen.
