算法Python用于在交互式控制台中决定>>>和…提示?

我正在实现一个自定义(Iron)Python控制台.

我需要显示>>>通常提示,但是当语句不完整时,我需要将提示更改为…并在执行之前收集更多行.

我如何知道用户输入的行是否完整或者我是否需要阅读更多行?

一个简单的方法似乎是检查是否存在.但我不确定我是否错过了其他案例:不存在.

我查看了IronPython源代码,以了解它是如何做到这一点的,但是涉及很多步骤,我的简单再现无法完全发挥作用.

解决方法:

尝试从仅查看冒号和括号的代码字符串进行猜测是不切实际的.您最终需要实现一半的Python解析器才能做到这一点.

标准库code模块重现了交互式Python解释器的行为,我相信IronPython使用它来实现其控制台. (CPython本身并不是用Python本身实现的.)

您感兴趣的线路延续逻辑来自codeop.compile_command功能.

这有点像黑客.本质上,它尝试使用模糊的PyCF_DONT_IMPLY_DEDENT标志编译()给定的代码,这意味着它不会假设任何打开的缩进在块的末尾自动关闭.然后它尝试再次添加新行来编译它(导致显式DEDENT).如果第二个工作但第一个工作没有,你有一个潜在的延续,更多的可以键入块.

上一篇:jenkins 执行远程脚本问题


下一篇:输入与raw_input:Python交互式Shell应用程序?