如何在Tauri中执行带参数的Python函数?Sidecars使用疑问
在Tauri框架中通过Sidecars执行带参数的Python函数
核心思路
借助Tauri的Sidecar机制调用Python脚本(或打包后的Python可执行文件),通过命令行参数传递数据,脚本处理完成后返回结果。
步骤1:配置Tauri项目
修改src-tauri/tauri.conf.json,添加Sidecar配置并开启对应权限:
{ "tauri": { "bundle": { "externalBin": [ "./src-tauri/bin/my_script" // 替换为你的Python可执行文件路径 ] }, "allowlist": { "shell": { "sidecar": true, "execute": true } } } }
步骤2:编写带参数处理的Python脚本
创建my_script.py,接收命令行参数并执行目标函数:
import sys def target_function(arg1, arg2): # 这里编写你的业务逻辑 return f"处理结果:参数1={arg1}, 参数2={arg2}" if __name__ == "__main__": # 检查参数数量是否足够 if len(sys.argv) < 3: print("参数不足", file=sys.stderr) sys.exit(1) # 解析命令行传入的参数 arg1 = sys.argv[1] arg2 = int(sys.argv[2]) # 执行函数并输出结果(供Tauri读取) print(target_function(arg1, arg2))
步骤3:打包Python脚本为可执行文件(可选但推荐)
用pyinstaller将脚本打包成单文件(避免依赖用户系统的Python环境):
pyinstaller --onefile my_script.py
将生成的可执行文件(Windows为.exe,Linux/macOS为无后缀文件)放到src-tauri/bin目录下。
步骤4:在Rust中编写Sidecar调用逻辑
修改src-tauri/src/main.rs,注册Tauri命令并实现Sidecar调用:
use tauri::Manager; #[tauri::command] async fn call_python_func(arg1: &str, arg2: i32) -> Result<String, String> { // 初始化Sidecar let sidecar = tauri::api::process::Command::new_sidecar("my_script") .map_err(|e| format!("创建Sidecar失败:{}", e))?; // 传递参数并执行脚本 let output = sidecar.args([arg1, &arg2.to_string()]) .output() .await .map_err(|e| format!("执行Sidecar失败:{}", e))?; // 处理执行结果 if output.status.success() { String::from_utf8(output.stdout) .map_err(|e| format!("输出解析失败:{}", e)) } else { let err_msg = String::from_utf8(output.stderr).unwrap_or("未知错误".to_string()); Err(format!("脚本执行失败:{}", err_msg)) } } fn main() { tauri::Builder::default() .invoke_handler(tauri::generate_handler![call_python_func]) .run(tauri::generate_context!()) .expect("Tauri应用启动失败"); }
步骤5:前端调用Rust命令
在前端代码中通过Tauri API触发Python函数调用:
import { invoke } from '@tauri-apps/api/tauri'; async function triggerPythonFunc() { try { const result = await invoke('call_python_func', { arg1: "测试文本", arg2: 123 }); console.log("Python返回结果:", result); // 这里可以添加结果的前端展示逻辑 } catch (error) { console.error("调用失败:", error); } }
内容的提问来源于stack exchange,提问作者CJ-Programmer
相关产品推荐
相关产品推荐

