我正在爲VK編寫一個私人在線Python解釋器,它將密切模擬IDLE控制檯。只有我和白名單中的一些人才能使用此功能,沒有不安全的代碼會損害我的服務器。但我有一個小問題。例如,我發送字符串代碼爲def foo():
,我不想獲得SyntaxError
,但繼續逐行定義函數,而不使用\n
編寫長字符串。在這種情況下,exec()
和eval()
不適合我。我應該用什麼來獲得所需的效果?對不起,如果重複,仍然不會從類似的問題得到它。模擬Python交互模式
1
A
回答
2
Python標準庫提供了code
和codeop
模塊來幫助您解決這個問題。該code
模塊只是直線上升的模擬標準的交互式解釋:
import code
code.interact()
它還提供了更精細的控制和它是如何工作的定製一些設施。
如果你想從更基本的組件構建的事情了,在codeop
模塊提供了一個命令編譯器記住__future__
聲明並確認不完整的命令:
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.
2
它歸結爲讀取輸入,然後
exec <code> in globals,locals
在無限循環。
參見例如IPython.frontend.terminal.console.interactiveshell.TerminalInteractiveSh ell.mainloop()
。
繼續檢測在inputsplitter.push_accepts_more()
中通過嘗試ast.parse()
完成。
事實上,IPython已經有一個名爲Jupyter Notebook的交互式Web控制檯,所以你最好的選擇應該是重用它。
相關問題
- 1. 模擬交互式Python會話
- 2. 模擬驗證交互
- 3. 模擬用戶交互
- 4. Python測試 - 即時交互式模擬建築?
- 5. 交互式Python網絡/圖形建模
- 6. Python交互模式下的錯誤?
- 7. Python的交互模式如何工作?
- 8. 在sitecustomize中檢查python交互模式
- 9. SublimeREPL上的Python交互模式
- 10. 什麼是python -i的node.js模擬:運行並進入交互模式?
- 11. DLV交互模式(調試)
- 12. matplotlib中的交互模式
- 13. 交互模式下的PowerShell
- 14. 模擬用戶交互的Gromacs在擊
- 15. 交互式Python
- 16. fsi(FSharp交互式)安靜模式
- 17. 如何以編程方式模擬與控制檯的交互?
- 18. 交互式和內聯模式的Python應用程序
- 19. 交互式Python GUI
- 20. 使用交互請求對象的MVVMCross用戶交互模式?
- 21. 將參數傳遞給交互模式
- 22. 交互式3D建模程序
- 23. Java數據庫交互模式
- 24. 讓C程序交互模式
- 25. HTML5中的交互式3D模型
- 26. 在睡眠模式下與iPhone交互
- 27. 鼠標交互的設計模式
- 28. Django架構與交互式模型
- 29. 默認配置IPython爲交互模式
- 30. 補丁:以非交互模式運行