我正在爲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. SublimeREPL上的Python交互模式
- 9. 在sitecustomize中檢查python交互模式
- 10. 什麼是python -i的node.js模擬:運行並進入交互模式?
- 11. matplotlib中的交互模式
- 12. 交互模式下的PowerShell
- 13. DLV交互模式(調試)
- 14. 模擬用戶交互的Gromacs在擊
- 15. 交互式Python
- 16. fsi(FSharp交互式)安靜模式
- 17. 如何以編程方式模擬與控制檯的交互?
- 18. 交互式和內聯模式的Python應用程序
- 19. 交互式Python GUI
- 20. 使用交互請求對象的MVVMCross用戶交互模式?
- 21. 模式的Spring的MVC狀態交互
- 22. jQuery模式不能正常交互
- 23. SBT交互模式命令不Babun
- 24. Django架構與交互式模型
- 25. imshow在交互模式的子圖中
- 26. SBT未進入交互模式
- 27. Ipython matplotlib交互模式如何工作?
- 28. oracle apex交互式報告模板
- 29. 3D交互式web部署3d-建模
- 30. 以交互模式輸出sys.stdout