高级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
也可用于数据结构。您将获得一个可编辑的沙盒,您可以在其中更改字典、重新排列列表、更改对象的字段值等。对象甚至可以定义一个自定义的 __snek_edit__
方法来控制它们如何被编辑。
丰富且交互式的表示
Sneketalk不会像普通文本那样打印列表、字典或对象,而是使用hrepr将它们作为丰富的HTML对象来打印。
通过Ctrl+点击
(或在Mac上使用Cmd+点击
)对象的表示,将其放入临时变量中。这使得测试或操作嵌套在另一个对象中的对象变得非常容易。
表示形式高度可定制,递归表示可以轻松定义和配置。有关如何定义自定义表示的详细信息,请参阅此处。
异常的表示尤其有趣,因为每个框架都与一个实时编辑器相关联,因此您可以直接在看到错误的地方修复它。
可视化
Snektalk支持复杂的可视化:图表、图形等。集成新的或现有的JavaScript库主要是一个从CDN链接并编写小包装器的问题。
配置可视化也很容易,以便各种交互调用Python回调。这个特性的一个很好的用途是能够点击图形中的节点或点,将底层数据放入变量中,并将其粘贴到REPL的输入框中,以便您进一步分析。
调试
/debug f(x, y)
将函数调用进入调试模式。Snektalk的调试器与pdb
非常相似,并且大多数pdb
命令(如step
、next
、continue
等)应该按相同的方式工作。
线程
/thread f(x, y)
将在单独的线程中运行f(x, y)
,这使得您在它运行的同时可以继续工作。每个线程都有一个简短的名称,以便您可以轻松地/kill
它们。
您可以使用snektalk -t
在线程中启动主脚本,从而立即访问REPL。这将允许您在脚本运行时检查或篡改全局状态,以及其他事物。
探查
通过ptera,Snektalk提供了探查程序内部任何位置变量的简便方法。
远程使用
您可以在远程计算机上运行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
-- 聚焦REPLCmd+点击
-- 将对象放入变量中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+B
,Cmd+Shift+B
-- 在可见编辑器和REPL之间循环
函数编辑器
Ctrl+Enter
-- 使REPL处于活动状态并聚焦Ctrl+Shift+Enter
-- 使REPL处于活动状态,提交到文件,并聚焦Cmd+S
-- 使REPL处于活动状态Cmd+Shift+S
-- 使REPL处于活动状态并将提交到文件Cmd+B
,Cmd+Shift+B
-- 在可见编辑器和REPL之间循环
其他
- 底部状态栏可以单击以查看所有事件列表
- 单击提示符以显示线程选择器;如果您在由不同线程调用的函数中放置了断点,则需要切换到该线程以与断点交互。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
snektalk-0.0.16.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 174dada1224aeb6e9e1497c3f6da10f01585d5060471b9d747eed9adc70ee8e8 |
|
MD5 | dbb982a88c18c24d396497e2abfa65bb |
|
BLAKE2b-256 | 9a5049a8d7187f67b9af1226b7d3ad7e36387cfda43c0814caebb65710f4a0e8 |