Meh*_*Meh 3 python console ironpython interactive read-eval-print-loop
我正在实现一个自定义 (Iron)Python 控制台。
一般情况下,我需要显示>>>提示,但是当语句不完整时,我需要将提示更改为...并在执行之前收集更多行。
我如何知道用户输入的行是否完整或者我是否需要阅读更多行?
一个简单的方法似乎是检查是否:存在。但我不确定我是否错过了其他:不存在的情况。
我查看了 IronPython 源代码来弄清楚它是如何做到这一点的,但是涉及很多步骤,我的简单复制未能完全工作。
仅通过查看代码字符串中的冒号和括号来尝试猜测是不切实际的。您最终需要实现一半的 Python 解析器才能做到这一点。
标准库代码模块重现了交互式 Python 解释器的行为,我相信 IronPython 正是使用这个模块来实现其控制台。(CPython 本身并未在 Python 中实现。)
您感兴趣的行继续逻辑来自codeop.compile_command函数。
这有点像黑客。本质上,它尝试compile()使用晦涩的标志来处理给定的代码PyCF_DONT_IMPLY_DEDENT,这意味着它不会假设任何开放缩进在块的末尾自动关闭。然后它尝试再次编译它并添加换行符(导致显式的 DEDENT)。如果第二个有效但第一个无效,则您有一个潜在的延续,可以在块中输入更多内容。
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |