IDLE¶
源代码: Lib/idlelib/
idle是Python的集成开发和学习环境。
Idle具有以下功能:
用100%纯python编码,使用
tkinter
图形用户接口工具包跨平台:在Windows、Unix和MacOS上基本相同
带有代码输入、输出和错误消息着色的python shell窗口(交互式解释器)
具有多个撤消、Python着色、智能缩进、调用提示、自动完成等功能的多窗口文本编辑器
在任何窗口中搜索,在编辑器窗口中替换,并搜索多个文件(grep)
具有持久断点、单步执行和查看全局和本地命名空间的调试器
配置、浏览器和其他对话框
启动和代码执行¶
启动时, -s
选项,idle将执行环境变量引用的文件 IDLESTARTUP
或 PYTHONSTARTUP
. 空闲的首次检查 IDLESTARTUP
如果 IDLESTARTUP
存在引用的文件正在运行。如果 IDLESTARTUP
不存在,空闲检查 PYTHONSTARTUP
.这些环境变量引用的文件是存储经常从空闲shell使用的函数或执行导入语句以导入公共模块的方便位置。
此外, Tk
如果启动文件存在,也会加载该文件。注意,tk文件是无条件加载的。此附加文件是 .Idle.py
在用户的主目录中查找。该文件中的语句将在tk名称空间中执行,因此该文件对于从idle的python shell导入要使用的函数不有用。
命令行用法¶
idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ...
-c command run command in the shell window
-d enable debugger and open shell window
-e open editor window
-h print help message with legal combinations and exit
-i open shell window
-r file run file in shell window
-s run $IDLESTARTUP or $PYTHONSTARTUP first, in shell window
-t title set title of shell window
- run stdin in shell (- must be last option before args)
如果存在参数:
如果
-
,-c
或r
使用,所有参数都放置在sys.argv[1:...]
和sys.argv[0]
设置为''
,'-c'
或'-r'
. 没有打开编辑器窗口,即使这是“选项”对话框中的默认设置。否则,参数是打开以进行编辑的文件,并且
sys.argv
反映传递给空闲本身的参数。
启动失败¶
idle使用一个套接字在空闲的GUI进程和用户代码执行进程之间进行通信。每当shell启动或重新启动时,都必须建立连接。(后者由表示“重新启动”的分隔线表示)。如果用户进程未能连接到GUI进程,它将显示 Tk
带有“cannot connect”(无法连接)消息的错误框,该消息将用户指向此处。然后它就退出了。
失败的常见原因是用户编写的文件与标准库模块同名,例如 random.py 和 tkinter.py . 当此类文件与即将运行的文件位于同一目录中时,idle无法导入stdlib文件。当前的修复方法是重命名用户文件。
虽然不像过去那么常见,但是防病毒或防火墙程序可能会停止连接。如果无法将程序设定为允许连接,则必须关闭程序才能使空闲状态工作。允许此内部连接是安全的,因为外部端口上看不到任何数据。一个类似的问题是网络配置错误,它会阻塞连接。
python安装问题偶尔会停止空闲:多个版本可能发生冲突,或者单个安装可能需要管理员访问。如果您撤消冲突,或者不能或不想以管理员身份运行,那么完全删除python并重新开始可能是最容易的。
僵尸pythonw.exe过程可能有问题。在Windows上,使用任务管理器检查是否有任务,如果有则停止。有时,由程序崩溃或键盘中断(control-C)启动的重新启动可能无法连接。关闭错误框或在Shell菜单上使用Restart Shell可能会解决临时问题。
当IDLE首次启动时,它会尝试读取 ~/.idlerc/
(~是一个人的主目录)。如果有问题,应显示错误消息。撇开随机磁盘故障不谈,这可以通过从不手动编辑文件来防止。而是使用“选项”下的“配置”对话框。一旦用户配置文件中出现错误,最好的解决方案可能是删除它并重新开始设置对话框。
如果IDLE退出时没有消息,并且它不是从控制台启动的,请尝试从控制台或终端启动它 (python -m idlelib
)并查看这是否会导致错误消息。
正在运行用户代码¶
除了极少数例外,使用idle执行python代码的结果与使用默认方法直接在文本模式系统控制台或终端窗口中使用python执行相同代码的结果相同。但是,不同的接口和操作偶尔会影响可见的结果。例如, sys.modules
以更多条目开始,并且 threading.activeCount()
返回2而不是1。
默认情况下,idle在单独的操作系统进程中运行用户代码,而不是在运行shell和编辑器的用户界面进程中。在执行过程中,它将替换 sys.stdin
, sys.stdout
和 sys.stderr
使用从shell窗口获取输入并将输出发送到shell窗口的对象。原始值存储在 sys.__stdin__
, sys.__stdout__
和 sys.__stderr__
不会被触碰,但可能 None
.
当shell有焦点时,它控制键盘和屏幕。这通常是透明的,但是直接访问键盘和屏幕的功能将不起作用。这些功能包括系统特定的功能,用于确定是否按下了某个键,如果按下了,则确定按下了哪个键。
IDLE的标准流替换不会由执行过程中创建的子进程继承,无论是直接由用户代码还是由模块(如多处理)继承。如果此类子流程使用 input
从sys.stdin或 print
或 write
对于sys.stdout或sys.stderr,应在命令行窗口中启动idle。然后,二级子进程将附加到该窗口以进行输入和输出。
在执行过程中运行的空闲代码向调用堆栈添加帧,否则这些帧将不存在。空闲包装 sys.getrecursionlimit
和 sys.setrecursionlimit
以减少附加堆栈帧的影响。
如果 sys
由用户代码重置,例如 importlib.reload(sys)
,IDLE的更改丢失,键盘输入和屏幕输出将无法正常工作。
当用户代码直接或通过调用sys.exit引发systemexit时,idle返回shell提示,而不是退出。
shell中的用户输出¶
当程序输出文本时,结果由相应的输出设备决定。当idle执行用户代码时, sys.stdout
和 sys.stderr
连接到idle外壳的显示区域。它的一些特性继承自底层的tk文本小部件。其他的是程序添加。重要的是,壳牌公司是为开发而设计的,而不是为生产运行而设计的。
例如,shell从不丢弃输出。将无限输出发送到shell的程序最终将填充内存,从而导致内存错误。相反,一些系统文本窗口只保留最后n行输出。例如,Windows控制台将用户设置为1到9999行,默认值为300。
tk文本小部件,因此是idle的shell,在unicode的BMP(基本多语言平面)子集中显示字符(代码点)。使用适当的字形显示哪些字符,使用替换框显示哪些字符取决于操作系统和安装的字体。制表符使以下文本在下一个制表位后开始。(每8个“字符”出现一次)。换行符使下列文本出现在新行上。根据操作系统和字体,其他控制字符将被忽略或显示为空格、方框或其他内容。(使用箭头键在此类输出中移动文本光标可能会显示一些令人惊讶的间距行为。):
>>> s = 'a\tb\a<\x02><\r>\bc\nd' # Enter 22 chars.
>>> len(s)
14
>>> s # Display repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='') # Display s as is.
# Result varies by OS and font. Try it.
这个 repr
函数用于表达式值的交互式回显。它返回输入字符串的修改版本,其中控制代码、一些BMP代码点和所有非BMP代码点都替换为转义代码。如上所示,它允许识别字符串中的字符,而不管它们是如何显示的。
正常和错误输出通常与代码输入和彼此分开(在单独的行上)。它们每个都有不同的突出显示颜色。
对于syntaxerror回溯,检测到错误的正常“^”标记将替换为用错误突出显示为文本着色。当从文件运行的代码导致其他异常时,可以右键单击一个回溯行,跳到空闲编辑器中的相应行。如有必要,将打开该文件。
Shell有一种特殊的功能,可以将输出行压缩为“压缩文本”标签。对于n行的输出(默认为n=50),这是自动完成的。n可以在设置对话框的常规页面的pyshell部分更改。用鼠标右键单击输出可以压缩行数较少的输出。这可能是有用的行,足够长以减慢滚动速度。
通过双击标签,压缩输出在适当位置展开。也可以通过右键单击标签将其发送到剪贴板或单独的视图窗口。
开发tkinter应用程序¶
为了方便tkinter程序的开发,idle有意与标准的python不同。进入 import tkinter as tk; root = tk.Tk()
在标准的python中,没有显示任何内容。在空闲状态下输入相同的值,会出现一个tk窗口。在标准python中,还必须输入 root.update()
去看窗户。Idle在后台执行等效操作,大约每秒20次,大约每50毫秒一次。下一步输入 b = tk.Button(root, text='button'); b.pack()
. 同样,标准python中的任何内容在进入 root.update()
.
大多数tkinter程序运行 root.mainloop()
,通常在tk应用程序被销毁之前不会返回。如果程序运行时 python -i
或者从一个空闲的编辑器, >>>
Shell提示直到 mainloop()
返回,此时没有任何可供交互的内容。
当从空闲编辑器运行tkinter程序时,可以注释掉mainloop调用。然后会立即得到shell提示,并可以与活动应用程序交互。在标准python中运行时,只需记住重新启用mainloop调用。
在没有子进程的情况下运行¶
默认情况下,idle通过使用内部环回接口的套接字在单独的子进程中执行用户代码。此连接在外部不可见,并且没有数据发送到Internet或从Internet接收到数据。如果防火墙软件仍然抱怨,您可以忽略它。
如果尝试建立套接字连接失败,IDLE将通知您。这种故障有时是暂时的,但如果持续存在,问题可能是防火墙阻塞了连接,或者是特定系统的配置错误。在问题解决之前,可以使用-n命令行开关空闲运行。
如果使用-n命令行开关启动idle,它将在单个进程中运行,并且不会创建运行rpc python执行服务器的子进程。如果python无法在您的平台上创建子进程或rpc socket接口,这可能很有用。然而,在这种模式下,用户代码并不与空闲本身隔离。此外,当选择运行/运行模块(F5)时,环境不会重新启动。如果您的代码已被修改,则必须重新加载受影响的模块(),并重新导入任何特定项(例如,从foo import baz),以使更改生效。出于这些原因,如果可能的话,最好使用默认的子进程运行idle。
3.4 版后已移除.
帮助和首选项¶
帮助来源¶
帮助菜单项“空闲帮助”显示库参考空闲章节的格式化HTML版本。结果,在一个只读的tkinter文本窗口中,接近于人们在Web浏览器中看到的内容。使用鼠标滚轮、滚动条或上下箭头键在文本中导航。或者单击TOC(目录)按钮,在打开的框中选择一个节标题。
帮助菜单项“Python Docs”打开了大量的帮助源,包括教程,可在 docs.python.org/x.y
,其中“x.y”是当前运行的Python版本。如果系统有文档的脱机副本(这可能是一个安装选项),则会打开该副本。
使用“配置空闲”对话框的“常规”选项卡,可以随时从“帮助”菜单中添加或删除选定的URL。
设置首选项¶
字体首选项、突出显示、键和常规首选项可以通过“选项”菜单上的“配置空闲”进行更改。非默认用户设置保存在 .idlerc
用户主目录中的目录。通过编辑或删除 .idlerc
.
在“字体”选项卡上,请参阅文本示例,了解字体和大小对多种语言中多个字符的影响。编辑示例以添加其他个人感兴趣的字符。使用示例选择单间距字体。如果特定字符在shell或编辑器中有问题,请将它们添加到示例的顶部,然后尝试更改第一个大小,然后更改字体。
在“高光和关键点”选项卡上,选择内置或自定义颜色主题和关键点集。若要使用较新的内置颜色主题或具有较旧空闲的键集,请将其保存为新的自定义主题或键集,并且较旧空闲的用户可以访问它。
在MACOS上闲置¶
在“系统首选项:停靠”下,可以将“打开文档时首选选项卡”设置为“始终”。此设置与idle使用的tk/tkinter GUI框架不兼容,它破坏了一些空闲特性。
扩展¶
IDLE包含一个扩展设施。可以使用“首选项”对话框的“扩展”选项卡更改扩展的首选项。有关详细信息,请参阅idlelib目录中config-extensions.def的开头。当前唯一的默认扩展名是zzdummy,这也是一个用于测试的示例。