code 模块是 Python 标准库中用于交互式解释器嵌入和自定义解释器交互环境的模块。它提供了底层接口,可在程序内部启动一个交互式 shell,用于调试、教学或 REPL 工具开发。

这个模块常见于调试器、远程控制台、图形界面的嵌入终端,或你想在程序运行时打开一个交互式命令行的场景中。

常见应用场景:

(1)在程序运行中启动一个交互式解释器进行调试。

(2)创建带预设环境的 REPL(如自动导入模块)。

(3)在命令行工具或 GUI 工具中集成 Python shell

(4)搭建简化版 Python 解释器。

(5)构建教学或演示用交互环境。

◆ ◆

核心概念

1、InteractiveConsole 类

一个类似 code.InteractiveInterpreter 的子类,提供支持交互式输入的解释器环境,适合嵌入到终端。

2、InteractiveInterpreter 类

基本解释器实现,提供代码执行能力,但不管理输入提示或代码缓存。

3、interact() 函数

使用 InteractiveConsole 快速启动一个交互式 shell。

4、compile_command() 函数

判断一段代码是否完整(是否可以执行),用于多行代码输入的支持。

◆ ◆

应用举例

例 1: 快速启动一个交互式解释器

import code

code.interact()

例 2:带预设变量的交互式解释器

import code

banner = "欢迎进入自定义 REPL"
local_vars = {"name": "Python", "version": 3.12}
code.interact(banner=banner, local=local_vars)

例 3:通过 InteractiveConsole 执行多行输入

import code

console = code.InteractiveConsole()
console.push("for i in range(3):")
console.push("    print(i)")
console.push("")  # 空行表示代码块结束

例 4:作为调试入口,在程序任意位置调用交互式解释器

import code

def debug_shell():
    print("进入调试模式")
    code.interact(local=dict(globals(), **locals()))

x = 42
debug_shell()  # 可访问 x 的值

例 5:判断代码是否完整

from code import compile_command

print(compile_command("for i in range(5):"))  # None(不完整)
print(compile_command("    print(i)"))         # None
print(compile_command(""))                     # 代码完整,可执行

◆ ◆

常用函数速览

code.InteractiveConsole([locals])

创建一个支持交互式输入的 Python 控制台。

参数

locals:字典形式的局部变量命名空间(默认使用 __main__ 的)

返回:InteractiveConsole 实例,可通过 .push() 逐行传入代码

code.InteractiveInterpreter([locals])

创建基础解释器,执行 Python 语句但不管理输入状态。

参数

locals:解释器上下文的局部变量环境

返回:InteractiveInterpreter 实例,适合自定义代码执行环境

code.compile_command(source, filename='', symbol='single')

将代码编译为可执行对象,支持判断代码是否完整。

参数

source:字符串形式的 Python 代码

filename:虚拟文件名(用于调试)

symbol:执行模式,通常为 'single' 或 'exec'

返回:code 对象(若代码完整),否则返回 None

code.interact([banner], [readfunc], [local])

快速启动一个交互式解释器(REPL)。

参数

banner:启动欢迎语

readfunc:自定义输入函数(一般忽略)

local:REPL 中可用的变量字典(如 locals())

返回:无(交互式命令行,直到用户退出)

◆ ◆

补充说明

1、code.interact() 是最常用的接口,适用于快速调试或教学。

2、使用 InteractiveConsole.push(line) 可以逐行输入代码(如 GUI 工具中实现交互窗口)。

3、compile_command() 是判断“代码是否结束”的关键,适用于构建支持多行语句的编辑器或交互工具。

4、模块中不包含自动补全、命令历史等功能,如需支持可结合 readline 使用。

5、适合嵌入到 CLI 工具、Web 终端(如 Jupyter)、游戏控制台、IDE 等。

点赞有美意,赞赏是鼓励