跳转到主要内容

高级Python REPL

项目描述

S N E K T A L K

Snektalk是一种开创性的新式REPL。

  • 实时代码编辑
  • 丰富且交互式的对象表示
  • 内置调试器
  • 检查程序的内部状态
  • 连接到远程进程

安装

pip install snektalk

使用方法

您可以使用 snektalk 而不是 python 来运行脚本。

usage: snektalk [-h] [--connect VALUE] [-m VALUE] [--no-watch] [--port NUM]
                [--socket VALUE] [--thread] [--version]
                [SCRIPT] ...

positional arguments:
  SCRIPT                Path to the script to run
  ARGV                  Script arguments

optional arguments:
  -h, --help            show this help message and exit
  --connect VALUE, -c VALUE
                        Hostname to connect to an existing instance
  -m VALUE              Module or module:function to run
  --no-watch            Don't watch changes on the filesystem
  --port NUM, -p NUM    Server port
  --socket VALUE, -S VALUE
                        Path to socket
  --thread, -t          Run the program in a thread
  --version             Show the version

功能

乍看之下,Snektalk可能看起来与Jupyter笔记本相似,但它遵循不同的范例。它没有“单元格”,旨在像传统的REPL或命令行一样使用。同时,它具有许多标准REPL和Jupyter通常没有的功能。

编辑函数和数据

简单地输入 /edit func,您将看到一个用于编辑 func 源代码的小型内联编辑器。您可以更改它,然后按 Ctrl+Enter 在当前进程中更改它,或按 Ctrl+Shift+Enter 将它保存回原始文件。当然,您可以在任何时间回到它。

edit

几乎 任何 函数都可以编辑,无论是您自己的还是来自第三方库甚至是标准库的。

/edit 也可用于数据结构。您将获得一个可编辑的沙盒,您可以在其中更改字典、重新排列列表、更改对象的字段值等。对象甚至可以定义一个自定义的 __snek_edit__ 方法来控制它们如何被编辑。

edit-data

丰富且交互式的表示

Sneketalk不会像普通文本那样打印列表、字典或对象,而是使用hrepr将它们作为丰富的HTML对象来打印。

repr

通过Ctrl+点击(或在Mac上使用Cmd+点击)对象的表示,将其放入临时变量中。这使得测试或操作嵌套在另一个对象中的对象变得非常容易。

click

表示形式高度可定制,递归表示可以轻松定义和配置。有关如何定义自定义表示的详细信息,请参阅此处

异常的表示尤其有趣,因为每个框架都与一个实时编辑器相关联,因此您可以直接在看到错误的地方修复它。

exc

可视化

Snektalk支持复杂的可视化:图表、图形等。集成新的或现有的JavaScript库主要是一个从CDN链接并编写小包装器的问题。

plot

配置可视化也很容易,以便各种交互调用Python回调。这个特性的一个很好的用途是能够点击图形中的节点或点,将底层数据放入变量中,并将其粘贴到REPL的输入框中,以便您进一步分析。

graph

调试

/debug f(x, y)将函数调用进入调试模式。Snektalk的调试器与pdb非常相似,并且大多数pdb命令(如stepnextcontinue等)应该按相同的方式工作。

debug

线程

/thread f(x, y)将在单独的线程中运行f(x, y),这使得您在它运行的同时可以继续工作。每个线程都有一个简短的名称,以便您可以轻松地/kill它们。

thread

您可以使用snektalk -t在线程中启动主脚本,从而立即访问REPL。这将允许您在脚本运行时检查或篡改全局状态,以及其他事物。

探查

通过ptera,Snektalk提供了探查程序内部任何位置变量的简便方法。

accumulate

远程使用

您可以在远程计算机上运行snektalk并通过SSH连接到它。为此,您需要运行两个命令

在远程端

在远程端使用带有-S选项的snektalk来连接到文件系统上的UNIX套接字。界面将通过该套接字而不是端口提供。

user@remote$ snektalk -S ~/sock/script.sock script.py

在本地计算机上

一旦远程进程正在运行,请使用带有-c选项的snektalk指定要连接的主机,并使用-S指向套接字文件。

me@local$ snektalk -c user@remote -S sock/script.sock

这将在远程进程的整个运行期间工作(请注意,本地Snektalk调用所做的不仅仅是调用正确的SSH命令将远程套接字转发到本地端口)。

关于计算节点的重要说明:为了便于在集群中使用,其中计算节点可能只能通过连接到登录节点来访问,Snektalk将在单独的文件中存储主机名(如上述示例中的sock/script.host),并尝试自动连接到它。因此,您应该能够在计算节点上运行snektalk,然后将登录节点作为-c的参数传递,Snektalk将使用登录节点作为跳转主机来连接到正确的计算节点。

命令

  • /debug expr -- 调试表达式
  • /dir expr -- 列出表达式返回的对象的所有成员
    • ?expr -- 与/dir expr相同
  • /edit expr -- 为表达式返回的对象打开编辑器
  • /quit -- 退出Snektalk
  • /restart -- 使用相同的初始命令重新启动Snektalk
  • /shell command -- 运行shell命令
    • //命令 -- 与 /shell命令 相同
  • /status -- 列出迄今为止接收到的所有状态消息

线程相关命令

  • /attach thread -- 切换到指定线程的REPL(您也可以点击提示符以列出线程,然后单击您想要附加的线程)
  • /detach -- 取消上一个/attach
  • /kill thread -- 停止指定线程
  • /thread expr -- 在新线程中运行表达式

键盘和鼠标绑定

注意:以下内容中,Cmd+X 表示在MacOS上的 Cmd+X 和在其他平台上的 Ctrl+X,除非另有说明。

全局绑定

  • Cmd+P -- 聚焦REPL
  • Cmd+点击 -- 将对象放入变量中
  • Cmd+Alt+点击 -- 锁定到侧边

REPL

  • Shift+Enter -- 在REPL中添加新行而不提交
  • Ctrl+Enter -- 提交
  • 上/下 -- 在历史记录中向上/向下移动(按REPL的内容过滤)
  • Ctrl+R -- 打开历史记录弹出窗口(模糊搜索)
    • 注意:当历史记录弹出窗口处于活动状态时,Shift-Up/Down 将选择多个条目
  • Ctrl+L -- 清除所有滚动记录
  • Ctrl+C(MacOS)-- 中断当前命令
  • Cmd+K Cmd+K -- 中断当前命令(这是两次 Cmd+K
  • Cmd+BCmd+Shift+B -- 在可见编辑器和REPL之间循环

函数编辑器

  • Ctrl+Enter -- 使REPL处于活动状态并聚焦
  • Ctrl+Shift+Enter -- 使REPL处于活动状态,提交到文件,并聚焦
  • Cmd+S -- 使REPL处于活动状态
  • Cmd+Shift+S -- 使REPL处于活动状态并将提交到文件
  • Cmd+BCmd+Shift+B -- 在可见编辑器和REPL之间循环

其他

  • 底部状态栏可以单击以查看所有事件列表
  • 单击提示符以显示线程选择器;如果您在由不同线程调用的函数中放置了断点,则需要切换到该线程以与断点交互。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

snektalk-0.0.16.tar.gz (2.6 MB 查看散列

上传时间

构建分布

snektalk-0.0.16-py3-none-any.whl (2.7 MB 查看散列

上传时间 Python 3

由以下机构支持