Ich schreibe einen privaten Online-Python-Interpreter für VK, die Idle-Konsole nah simulieren würde. Nur ich und einige Leute in der Whitelist könnten diese Funktion nutzen, keinen unsicheren Code, der meinem Server schaden könnte. Aber ich habe ein kleines Problem. Zum Beispiel sende ich die Zeichenfolge mit Code def foo():
, und ich möchte nicht SyntaxError
erhalten, sondern weiterhin Zeile für Zeile definieren, ohne lange Zeichenfolgen mit der Verwendung von \n
zu schreiben. exec()
und eval()
passt mir in diesem Fall nicht. Was sollte ich verwenden, um den gewünschten Effekt zu erzielen? Sorry, wenn Duplikate, bekomme es immer noch nicht von ähnlichen Fragen.Python-Simulationsmodus interaktiv
Antwort
Die Python-Standardbibliothek enthält die Module code
und codeop
, die Ihnen dabei helfen. Das code
Modul nur straight-up simuliert den interaktiven Standardinterpreter:
import code
code.interact()
es auch ein paar Einrichtungen für detailliertere Kontrolle und Anpassung bietet, wie es funktioniert.
Wenn Sie die Dinge bauen von mehr Basiskomponenten wollen, bietet das codeop
Modul einen Befehl Compiler, der __future__
Aussagen und erkennt unvollständige Befehle erinnert sich:
import codeop
compiler = codeop.CommandCompiler()
try:
codeobject = compiler(some_source_string)
# codeobject is an exec-utable code object if some_source_string was a
# complete command, or None if the command is incomplete.
except (SyntaxError, OverflowError, ValueError):
# If some_source_string is invalid, we end up here.
# OverflowError and ValueError can occur in some cases involving invalid literals.
Es läuft darauf hinaus, das Lesen Eingang nach unten, dann
exec <code> in globals,locals
in einer Endlosschleife.
Siehe z.B. IPython.frontend.terminal.console.interactiveshell.TerminalInteractiveSh ell.mainloop()
.
Fortsetzung Erkennung erfolgt in inputsplitter.push_accepts_more()
durch den Versuch ast.parse()
.
Eigentlich hat IPython bereits eine interaktive Webkonsole namens Jupyter Notebook, also sollten Sie sie am besten wiederverwenden.
- 1. Go interaktiv Shell
- 2. F # interaktiv beendet
- 3. Einbettung F # interaktiv
- 4. PyGreSQL SQL interaktiv ausführen
- 5. 'svn add' interaktiv
- 6. UIScrollView: Tastatur entlassen interaktiv
- 7. Android interaktiv Kommunikation
- 8. Interaktiv Keyboard ablehnen Bug
- 9. Google Maps ist nicht interaktiv
- 10. Ionic Kopfleiste Schaltfläche nicht interaktiv
- 11. Bitnami Stack-Installer nicht interaktiv
- 12. Wie mache ich Bilder interaktiv?
- 13. Emacs: interaktiv Suche offene Puffer
- 14. Matplotlib ziehen überlappende Punkte interaktiv
- 15. F # - Keep F # interaktiv von Beitragsausgabe
- 16. Erstellen Sie ein Popup-Dialogfeld interaktiv
- 17. OrbitControls Rotation automatisch anhalten wenn interaktiv?
- 18. Symfony interaktiv Befehlstest endet mit RuntimeException
- 19. Python interaktiv REPL innerhalb einer With-Anweisung
- 20. "Initialisieren interaktiv mit Projekt" in VS2017
- 21. Wie man Variablen interaktiv für ediff setzt
- 22. Openshift: wie scc nicht interaktiv bearbeiten?
- 23. Wie mache ich DXF-Dateien interaktiv, programmatisch?
- 24. F # interaktiv: Wie aktuelles Arbeitsverzeichnis anzeigen/ändern
- 25. Interaktiv ein- und ausschalten unter Linux?
- 26. interaktiv multiangles (zoom + pan) video player
- 27. Wie "Docker Schwarm entsperren" nicht interaktiv aufrufen?
- 28. Julia pyplot aus dem Skript (nicht interaktiv)
- 29. Git (1.8.1.2) Fehler beim Hinzufügen interaktiv
- 30. QoS Benutzer interaktiv und Aktualisieren der UI