使用PyCharm进行交互式Shell调试

77

我是PyCharm的新手,长期以来一直在使用IDLE。

IDLE 在脚本执行后使用 Python 对象非常方便。是否有办法在使用 PyCharm 时,在交互式 Python shell 中使用脚本对象以及执行后的结果呢?

例如,我们有一个名为 'test' 的项目,其中包含一个文件 'test.py':

a = '123'
print a

执行后我们可以得到结果:

123
Process finished with exit code 0

我怎样才能在交互式 shell 中使用字符串 "a"?

8年后添加。我的 PyCharm 教程(俄语):https://youtu.be/-RzKJlLXw54


2
可能是从PyCharm控制台运行模块的重复问题。 - Piotr Dobrogost
9个回答

118

当前调试会话的内置Python shell

  1. 在您的代码中感兴趣的行上设置断点(例如通过单击装订线),然后启动调试(右键单击编辑器,然后选择调试myfile.py...)。
  2. 当达到断点时,请定位调试>控制台选项卡,然后单击显示命令行图标(请参见屏幕截图)。

这将启用一个Python shell(请注意屏幕截图上的绿色>>>),您可以在其中访问当前范围内的所有变量,并执行通常在Python shell中执行的所有操作。

在最近的PyCharm版本中,如果安装了IPython,则会获得完整的IPython解释器而不是普通的Python shell。

Enabling Python shell for the debugged app

评估表达式窗口

作为更加舒适的替代方案,如果您只需要检查一些变量、访问成员或在范围内调用对象的方法,一旦到达断点,选择当前范围内的表达式,右键单击->评估表达式(或使用菜单中显示的热键RunEvaluate Expression...),按需编辑——您可以输入任何Python表达式,并提供自动补全功能——然后按Enter(或单击Evaluate)来检查结果。

支持多个和多行表达式:要获取Inspect对话框的多行版本,请单击Code fragment mode或在编辑器中选择多行代码,然后评估表达式。您可以为现有变量分配值(不能定义新变量),并运行整个代码块。 在当前范围内检查变量

鼠标悬停在变量上

在调试模式下,当你遇到断点后,将鼠标指针悬停在变量上(1-2秒),就可以看到变量的值显示在工具提示中。

enter image description here

提示中包含一个图标,点击它将在弹出窗口中打开检查器。

enter image description here

对于作用域内的变量,检查器显示在底部面板的Debug > Debugger下。

对于pandas数据框架,您将在变量检查器面板或悬停弹出窗口中看到一个View as DataFrame链接——点击该链接将在数据视图面板中以表格形式显示数据框架

更新

在更新的Pycharm版本(2019+)中,解释器图标现在看起来不同:

pycharm interpreter icon

在单元测试/pytest调试界面中,图标位于图标栏的首位。

“显示命令行”是一个功能,您甚至可以将其绑定到键盘快捷键上。 - Hartmut Pfarr
2
从调试器切换到控制台可以使用Alt-Left或Alt-Right。 - Hartmut Pfarr

21

我发现来自Piga-fetta、Games Brainiac和kobejohn的前两个答案有用,但不够满意。因此,我提供了第三个选项:

将选定的代码加载到控制台 (我的建议)

使用Shift+Alt+E将选定的代码或光标所在行加载到控制台并立即运行它。这也有一些缺点:

  • 如果需要运行整个文件,则必须选择整个文件。
  • 即使遇到错误,代码仍然会继续运行。

但是,作为回报,我们得到了比IDLE更好的功能(在我看来):能够逐个选择地运行代码。

阅读此处了解更多信息。

使用断点和表达式求值 (Alt-F8) (Piga-fetta建议)

这在需要在代码中某些位置进行调试的大型应用程序中非常有用,但对于交互式编码来说不是很有用。因此,这不是我们想要的。

使用工具-->运行Python控制台 (Games Brainiac和kobejohn建议)

这正是我们想要的,但有点麻烦,特别是如果我们要运行的模块不在项目的根目录中。


12

执行命令后保持命令行界面打开

对于仍然遇到此问题的人:转到运行/调试菜单,选择编辑配置,勾选“显示命令行”复选框,这将使您能够在 >>> 提示符下输入参数并测试函数。

仅更改当前文件设置

全局配置

要使此更改适用于所有您的 .py 文件(因为此复选框仅适用于您正在处理的当前文件),请转到:“编辑配置”,在弹出窗口中,您将看到左侧的菜单树,请选择“默认值”,然后选择“Python”,然后勾选“显示命令行”复选框,这将使其成为您打开 .py 文件时的默认设置,(此功能应默认开启!)

更改所有 Python 文件的设置


2
选项现在变成了“使用Python控制台运行”,而不是“之后显示命令行”。 - rovyko

11
您可以在PyCharm 2和PyCharm 3中直接使用Python控制台。由于您的项目根目录已经添加到PYTHONPATH中,因此可以直接导入:

下面通过一些屏幕截图来进行演示:

1. 在根目录中创建一个console.py文件

输入图像描述

2. 在PyCharm内打开Python控制台

输入图像描述

3. 从console.py文件中导入变量

输入图像描述

这样,您已经成功地导入了变量。


6
我在以下网站找到了最佳答案: Interacting with program after execution

引用下面的答案:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
从python --help的输出中获得:
-i : 在运行脚本后进行交互式检查;即使stdin似乎不是终端,也会强制出现提示符;还有PYTHONINSPECT=x
要在PyCharm中设置解释器选项,请转到Run|Edit Configuration
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
我尝试并且它能够正常工作 - 只需使用“-i”(不带引号)作为“解释器选项”。 请注意,如果您仅更改了Run / Debug Configurations中的默认值,则可能不会立即对先前已运行的脚本产生效果; 您需要逐个编辑那些脚本的配置。

至少在4.5.4版本中,PyCharm在“运行/调试配置”对话框中提供了一个“后显示命令行”选项,我发现这比-i选项更好(上箭头用于最后一条命令)。 - jan-glx

4

未提及的内容:

如果您想在执行期间使用变量,例如在设置断点后尝试调用当前范围内对象的函数,请使用 PyCharm 的“Evaluate Expression (Alt-F8)”弹出窗口。

在此窗口中,您可以调用函数并查看输出。代码完成也有效。

此窗口还具有“代码片段模式”,我正在研究它的含义-您可以在这里定义临时函数吗?

(我正在使用 PyCharm 3.0.1 社区版)


2

*更新

根据您的更新,我认为这个SO问题提供了至少一个完美的答案

让我逐步写出比我链接中的答案更详细的步骤:

  • 选择工具 --> 运行Python控制台
  • 导入你的脚本import myscript(不带.py)(如果你想要一个简短的名称,请使用import myscript as m
  • (如果你有一个if __name__ == '__main__'块)你可能需要运行main()
  • 如你在问题中所述,a可以在myscript.a中得到
  • 如果你想要的话,可以用myscript = reload(myscript)再次运行脚本

*原文

在PyCharm 3.0中,你可以做以下事情:

  • 选择工具 --> 运行Python控制台
  • 选择工具 --> 打开终端(从中启动python或进行其他操作)

这是你想要的吗?如果不是,请尝试并让我知道与你想要的有何不同。


0
另一种选择是简单地使用Spyder用于“交互式”运行脚本的相同命令:>>> runfile('myscript.py')。然后,您可以打开变量资源管理器以进行交互式控制台并通过再次运行上面的命令重新运行该脚本。与Spyder工作流非常相似。所有其他上述方法都将使您留下交互式控制台提示符,但不提供打开变量资源管理器的选项,因此如果您正在寻找这种功能,请尝试上述方法。

0
除了我在Ramkins的回答中提出的建议之外,您还可以通过在文件内右键单击并选择在控制台中运行文件来直接在控制台中运行该文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接