PyScriptpy-repl会话管理教程
时间:2025-10-28 18:21:32 330浏览 收藏
本文详细介绍了在 PyScript 的 `py-repl` 环境中捕获用户输入 Python 代码的两种核心方法,旨在帮助开发者构建更强大的交互式应用。第一种方法是利用 `py-repl` 元素的内部 `getPySrc()` 方法,该方法能够一次性获取当前会话的完整代码,适用于需要在会话结束时整体获取代码的场景。第二种方法是借助 PyScript 插件机制中的 `beforePyReplExec()` 和 `afterPyReplExec()` 方法,通过跟踪每次代码执行来实现更精细的控制,例如记录每次用户执行的代码单元。本教程将深入讲解这两种方法的原理、示例代码以及适用场景,帮助开发者有效地保存、分析或提交用户在交互式环境中编写的代码,尤其是在构建在线编程作业提交系统等需要收集用户代码的场景时,提供清晰的指导。

本文旨在详细介绍如何在 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 的代码内容并显示出来:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PyScript REPL 代码捕获示例</title>
<link rel="stylesheet" href="https://pyscript.net/releases/2024.3.1/core.css">
<script type="module" src="https://pyscript.net/releases/2024.3.1/core.js"></script>
</head>
<body>
<h1>PyScript REPL 代码捕获</h1>
<p>请在下方的 REPL 中输入一些 Python 代码:</p>
<py-repl id="my-repl" output-mode="append"></py-repl>
<button id="capture-button">捕获 REPL 代码</button>
<pre id="captured-code-output">