logo
0
0
WeChat Login
ghost<wuvs2019819119@outlook.com>
fix: run_script

Tauri + React + Typescript

This template should help get you started developing with Tauri, React and Typescript in Vite.

Recommended IDE Setup


Rust 后端模块说明

Rust 代码位于 src-tauri/src,主要由四个模块组成:

模块作用关键接口
db.rs负责与 SQLite(rusqlite)交互,初始化表结构并提供 CRUDinsert_scriptlist_scriptsget_scriptinsert_logupdate_script_statusdelete_script
script.rs暴露给前端的 tauri command,实现脚本管理与日志逻辑add_scriptadd_existing_scriptget_script_detaillist_scriptsappend_script_logrun_scriptstop_scriptdelete_script
file.rs文件操作辅助,创建/删除文件与目录create_file_with_dirsdelete_file
path.rs路径校验与权限检测,统一返回体existsis_fileis_directory

数据结构

db.rs 中的核心结构体对应 docs/AllDoc.md 描述的需求:

  • Script:脚本记录,包含 idnamepath、描述、Python/UV 版本、状态、创建/更新时间,以及日志列表。
  • ScriptLog:日志记录,包含 script_id、当前状态、是否 live,以及按行的日志内容 ScriptLogLine
  • ScriptListQuery / PaginatedScripts:分页查询入参与结果。
  • NewScript / NewScriptLog:新增脚本与日志的 payload。

tauri command(前端 invoke 名称)

Command 名称功能请求参数示例
add_script新建脚本:若 path 不存在会创建空文件{ "name": "demo", "path": "/tmp/demo.py" }
add_existing_script登记已有脚本:要求指定路径已存在同上
get_script_detail获取脚本详情及日志{ "script_id": 1 }
list_scripts分页+搜索脚本{ "query": { "page": 1, "page_size": 10, "keyword": "demo", "status": 1 } }
append_script_log追加日志{ "script_id": 1, "status": 1, "live": true, "data": [{ "time": "...", "message": "日志" }] }
run_script异步执行 Python 脚本(后台线程)并实时写入日志{ "script_id": 1 }
stop_script将状态置为结束并写“手动停止”日志{ "script_id": 1 }
delete_script删除脚本记录,支持只删除数据库记录或同时删除文件{ "script_id": 1, "delete_file": true }
check_uv检查本机 uv 版本,用于 NewScript 自动补全无参数

前端可通过 @tauri-apps/api/coreinvoke 调用,例如:

import { invoke } from "@tauri-apps/api/core"; const payload = { name: "demo", path: "/tmp/demo.py" }; const result = await invoke<ApiResult<Script>>("add_script", payload);

数据库位置与配置

  • 默认数据库文件为工作目录下的 pyfastgui.sqlite3
  • 可通过环境变量 PYFASTGUI_DB_PATH 指定另一个文件位置。
  • 单测中使用 db::set_db_path/reset_db_path 覆盖该路径。

运行脚本与实时日志

run_script 会在后台线程中启动脚本进程,并通过管道持续读取 stdout/stderr。每读取到一行非空输出,都会即时写入 script_logs 表(live=true,状态 Running),从而支持前端实时展示执行过程。脚本退出后会根据退出码自动写入成功/失败日志,并更新脚本状态为 SuccessError。若无法找到 Python 解释器或线程启动失败,会立即回滚状态并写入错误日志。

开发调试

  1. 运行 pnpm dev(或 npm run dev)启动 Vite 前端,同时 tauri dev 会构建 Rust 端。
  2. 若仅需测试 Rust 层,进入 src-tauri 执行 cargo checkcargo test
  3. src-tauri/src/script.rs 包含针对新增脚本与分页查询的单元测试,可作为调用示例。