
本文旨在详细介绍如何在 pyscript 的 `py-repl` 环境中捕获用户输入的 python 代码。我们将探讨两种主要方法:利用 `py-repl` 元素的内部 `getpysrc()` 方法获取当前会话的完整代码,以及通过 pyscript 插件机制中的 `beforepyreplexec()` 和 `afterpyreplexec()` 方法跟踪每次代码执行。通过这些技术,开发者可以有效地保存、分析或提交用户在交互式环境中编写的代码。
在构建基于 PyScript 的交互式应用,特别是需要收集用户在 py-repl 环境中输入代码的场景时(例如在线编程作业提交系统),如何准确捕获这些代码是一个关键问题。本教程将深入讲解两种行之有效的方法,帮助您实现这一目标。
方法一:使用 py-repl.getPySrc() 获取当前会话代码
py-repl 元素提供了一个内部方法 getPySrc(),可以直接获取当前 REPL 会话中所有已输入的 Python 代码内容。尽管这是一个实现细节,但它在 PyScript 的多个版本中表现稳定,并且社区已提出将其作为官方 API 功能的需求。这种方法适用于需要一次性获取用户在会话结束时所有代码的场景。
工作原理
当 getPySrc() 方法被调用时,它会返回一个字符串,其中包含 py-repl 界面中所有单元格的当前代码内容。您可以从 PyScript 内部或其他 JavaScript 代码中调用此方法。
示例代码
以下示例展示了如何在 PyScript 应用中通过一个按钮点击事件获取 py-repl 的代码内容并显示出来:
PyScript REPL 代码捕获示例
PyScript REPL 代码捕获
请在下方的 REPL 中输入一些 Python 代码:
from pyweb import pydom
def capture_repl_code(*args, **kwargs):
"""
从 py-repl 元素中获取当前代码内容并显示。
"""
repl_element = pydom["#my-repl"][0] # 获取 py-repl 元素
current_code = repl_element.getPySrc() # 调用 getPySrc() 方法
output_element = pydom["#captured-code-output"][0]
output_element.html = f"捕获到的代码:\n{current_code}"
print("代码已捕获并显示。")
# 将 Python 函数绑定到按钮的点击事件
pydom["#capture-button"].onclick(capture_repl_code)
print("PyScript 应用已加载,请在 REPL 中输入代码。")










