使用 Visual Studio 中的 Python 交互窗口

Visual Studio 为每个 Python 环境提供交互式读取-评估-打印-循环 (REPL) 窗口,改进了在命令行中运行 python.exe 命令获得的 REPL。 在 Python 交互窗口中,可以输入任意 Python 代码并查看即时结果。 这种编码方式有助于了解与实验 API 和库,并以交互方式开发要包含在项目中的工作代码。

显示 Visual Studio 2022 中 Python 交互式读取-评估-打印循环 (REPL) 窗口的屏幕截图。

显示 Visual Studio 中 Python 交互式读取-评估-打印循环 (REPL) 窗口的屏幕截图。

Visual Studio 有大量 Python REPL 模式可供选择:

REPL 描述 编辑 调试 映像
标准 默认 REPL 直接与 Python 通信 标准编辑(多行等) 是,通过 $attach
调试 默认 REPL 与已调试的 Python 进程通信 标准编辑 仅调试
IPython REPL 与 IPython 后端通信 IPython 命令,Pylab 的便利 是,在 REPL 中内联
不带 Pylab 的 IPython REPL 与 IPython 后端通信 标准 IPython 是,单独窗口

本文介绍标准 REPL 模式和调试 REPL 模式。 有关 IPython 模式的详细信息,请参阅使用 IPython REPL

有关包含示例的详细演练,包括与编辑器的交互(如 Ctrl+Enter),请参阅使用交互 REPL 窗口

先决条件

目前不支持 Visual Studio for Mac。 有关详细信息,请参阅 Visual Studio for Mac 发生了什么情况?Windows、Mac 和 Linux 上的 Visual Studio Code 通过可用扩展与 Python 配合工作

打开交互窗口

以下有几种方法可用于针对 Python 环境打开交互窗口

  • 在“Python 环境”窗口中:

    1. 选择“查看”>“其他窗口”>“Python 环境”以打开“Python 环境”窗口(或使用键盘 Ctrl+K>Ctrl+`)。

    2. 在“Python 环境”窗口中,选择一个环境,并切换到该环境的“概述”页面。

    3. 在“概述”页面中,选择“打开交互窗口”选项。

    显示如何在 Visual Studio 2022 中为选定环境使用“打开交互窗口”选项的屏幕截图。

    显示如何在 Visual Studio 中为选定环境使用“打开交互窗口”选项的屏幕截图。

  • 在 Visual Studio 工具的“查看”菜单中,选择“其他窗口”>“Python 交互窗口”

    显示如何在 Visual Studio 2022 中使用“查看 Python 交互窗口”菜单选项的屏幕截图。

    显示如何在 Visual Studio 中使用“查看 Python 交互窗口”菜单选项的屏幕截图。

  • 在 Visual Studio 工具栏上的“调试”菜单中,选择“在 Python 交互窗口中执行<项目 | 文件>”,或使用键盘快捷键盘 Shift+Alt+F5。 可以为项目中的启动文件或任何独立文件打开交互窗口

    显示如何在 Visual Studio 2022 中使用“在 Python 交互窗口中调试执行项目”菜单选项的屏幕截图。

    显示如何在 Visual Studio 中使用“在 Python 交互窗口中调试执行项目”菜单选项的屏幕截图。

另一个选项是将在 Visual Studio 编辑器中编写的代码发送到交互窗口。 在将代码发送到交互窗口中介绍了此方法。

了解交互窗口选项

可以控制交互窗口的各个方面,例如启动脚本文件的位置以及箭头键在窗口环境中的作用方式。 若要访问这些选项,请选择“工具”>“选项”>Python>“交互窗口”

Visual Studio 中 Python 交互窗口选项的屏幕截图。

Visual Studio 的 Python 交互窗口选项中详细介绍了这些选项。

使用交互窗口

交互窗口中,可以在 REPL Python 命令提示符 >>> 处逐行输入代码。 输入每行时,Visual Studio 将执行代码,包括导入必要的模块和定义变量。

当 Visual Studio 检测到一行代码未形成完整语句时,代码提示符将更改为 REPL 续延 ...。 此提示符表示需要输入更多行代码才能补全语句块。 Visual Studio 在尝试执行代码块之前等待结束语法。

定义 for 语句时,第一行代码将启动 for 块并以冒号结尾。 该块可以包含一行或多行代码,用于定义要在 for 循环期间完成的任务。 在空行上选择 Enter 时,交互窗口将关闭程序块,由 Visual Studio 执行该代码。

命令行 REPL 的比较

交互窗口通过自动缩进属于周边范围的语句,改进常用 Python 命令行的 REPL 体验。 这两种方法都允许你使用箭头键滚动浏览所输入的代码。 交互窗口还提供多行项,而命令行 REPL 仅提供单行。

元命令

交互窗口还支持多个元命令。 所有元命令都以美元符号 $ 开头。 可以输入 $help 以查看元命令列表,并输入 $help <command> 以获取特定命令的使用情况详细信息。 下表对元命令进行了汇总。

元命令 说明
$$ 插入注释,用于注释会话中的代码。
$cls$clear 清除编辑器窗口的内容,使历史记录和执行上下文保持不变。
$help 显示命令列表,或有关特定命令的帮助。
$load 从文件加载命令并执行,直到完成。
$mod 将当前范围切换为指定模块名称。
$reset 将执行环境重置为初始状态,但保留历史记录。
$wait 至少等待指定的毫秒数。

Visual Studio 扩展还可以通过实现和导出 IInteractiveWindowCommand 类来扩展命令。 有关详细信息,请参阅(GitHub 上的示例)。

切换交互窗口的范围

默认情况下,项目交互窗口的范围为项目的启动文件,就像从命令提示符处运行程序文件一样。 对于独立文件,范围设置为该文件。 在 REPL 会话期间,可以随时使用“模块范围”下拉列表来更改范围:

显示如何使用“模块范围”下拉菜单更改 Visual Studio 2022 交互窗口中的范围的屏幕截图。

显示如何使用“模块范围”下拉菜单更改交互窗口中的范围的屏幕截图。

导入模块后(如 import importlib),“模块范围”下拉菜单中将显示可切换到该模块任意范围的选项。 交互窗口中的消息会报告新范围的更改,因此你可以通过查看命令历史记录跟踪会话期间如何达到某个特定状态。

如果在某个范围中输入 dir() 命令,Visual Studio 将显示该范围的有效标识符,包括函数名称、类和变量。 下图显示了 importlib 范围的 dir() 命令的结果:

显示 Visual Studio 2022 中 importlib 范围的交互窗口中的输出的屏幕截图。

显示 importlib 范围的交互窗口中的输出的屏幕截图。

将代码发送到交互窗口

除了直接在交互窗口中执行外,还可以将 Visual Studio 编辑器中的代码发送到该窗口。 此命令非常适用于迭代或演化代码开发,包括在开发时测试代码。

  1. 在 Visual Studio 编辑器中打开代码文件,选择部分或全部代码。

  2. 右键单击所选代码,然后选择“发送到交互窗口”(或使用键盘快捷键 Ctrl+EE)。

    显示如何在Visual Studio 2022 中使用“发送到交互窗口”菜单选项的屏幕截图。

    显示如何在 Visual Studio 中使用“发送到交互窗口”菜单选项的屏幕截图。

修改和运行代码

将代码发送到交互窗口并查看输出后,可以修改代码并测试更改。 使用向上和向下箭头,在窗口的命令历史记录中滚动到该代码。 通过选择 Ctrl+Enter 修改代码并运行更新后的代码。

进行更改时,如果在完整代码语句的末尾选择 Enter,Visual Studio 将执行该代码。 如果代码语句不完整,Visual Studio 会在窗口中插入换行符。

保存代码并删除提示符

完成代码的修改后,可以在交互窗口中选择更新后的代码,然后将其粘贴回项目文件以保存工作。

交互窗口中的代码粘贴到编辑器时,默认情况下 Visual Studio 会删除 REPL 命令提示符 >>> 和续延提示符 ...。 此行为可让你轻松地将代码从窗口转移到编辑器。

可以使用交互窗口的“粘贴删除 REPL 提示符”选项来更改行为:

  1. 选择“工具”>“选项”,打开“选项”对话框。

  2. 展开“文本编辑器”>Python>“格式设置”部分。

  3. 清除“粘贴删除 REPL 提示符”选项。

  1. 选择“工具”>“选项”,打开“选项”对话框。

  2. 展开“文本编辑器”>Python>“高级”部分。

  3. 清除“粘贴删除 REPL 提示符”选项。

清除该选项时,提示符字符将保留在从窗口粘贴的代码中。 有关详细信息,请参阅选项 - 其他选项

查看 IntelliSense 的行为

与代码编辑器中 IntelliSense 仅基于源代码分析不同,交互窗口包括基于活动对象的 IntelliSense 建议。 因此,交互窗口中的 IntelliSense 建议更为正确,尤其是在使用动态生成代码的情况下。 缺点是具有副作用(如记录消息)的函数可能会影响开发体验。

可以通过“完成”选项调整 Intellisense 行为:

  1. 选择“工具”>“选项”,打开“选项”对话框。

  2. 展开 Python>“交互窗口”部分。

  3. 调整“完成模式”组中的设置,例如“永不评估表达式”或“隐藏静态分析建议”

有关详细信息,请参阅选项 - 交互窗口选项