Skip to main content

概述

本篇实践介绍如何创建、切换和删除 SDK 本地用户,并管理标定数据迁移。应用场景包括多人共用设备时隔离标定数据和在不同机器间迁移个人配置。 对应的 Python 示例为 4.user.py,C 示例为 3_user_management.c。 接口与参数见 SDK 用户管理 和 用户数据导入导出。

前置条件

硬件

用户管理只读写本地数据,不需要连接手套。

软件

数据流

本地存储布局

SDK 使用 ~/.wuji/sdk/ 保存以下数据:
registry.toml 示例:
默认用户的 user_id 为空字符串,不是 "default" 或 None。current_user_id 保存在此文件中,因此用户切换会持久化。

API 参考

下表列出用户管理相关接口: Python 和 C 提供对应的用户管理能力。导出、预览和导入接口用于在不同电脑之间迁移标定数据。 Python 侧用户 dict 包含以下字段: user_id、display_name、description、is_default、created_at、updated_at、external_id。C 侧对应 WujiUserInfo 结构体,字段同名。 C API 返回的 WujiUserInfo 字符串由 SDK 分配。单个结构体使用 wuji_user_info_free(&user) 释放,数组使用 wuji_user_info_array_free(users, len) 释放。不要混用这两个函数。 WujiUserUpdate 除了 display_name、description、external_id 三个字段,还有 clear_description 与 clear_external_id 两个布尔位,用来把字段显式置空——只传 NULL 表示「不改」,不表示「清空」。

集成步骤

先确认当前用户,再选择或创建用户,最后核对切换结果。用户操作不需要连接设备。

1. 查看当前用户

读取当前用户,确认接下来的标定数据将归属谁。

2. 选择或创建用户

按显示名称查找用户,已有用户直接复用,找不到时创建。下文 Python 的 find_user_by_display_name 和 C 的 switch_or_create_user、ExampleArgs 均来自 Python 示例 和 C 示例,并非 SDK 接口。多个同名用户会触发错误,处理重名后再切换。
C 辅助函数依次调用 wuji_list_users、按需调用 wuji_create_user 或 wuji_update_user,再调用 wuji_switch_user。函数释放查询列表和临时用户信息,返回切换后的 current。

3. 切换并核对

Python 使用 user_id 切换,C 在上一步已完成切换。核对返回的用户信息后,再进入标定流程。切换会持久保存当前用户,后续进程也使用选中的用户。

4. 释放资源

Python 的用户字典由运行时管理。C 程序结束时释放用户信息并关闭 SDK。释放查询结果不会删除用户或标定数据。

运行示例

C 侧 --list 的实测输出:
创建新用户时 previous 与 current 两段会不同:
两侧输出格式完全一致,示例做了对齐。* 标记当前用户。 示例使用 Wuji SDK v2026.8.31,运行时不需要连接设备。

行为与错误处理

以下行为适用于用户管理接口。

用户名必须唯一

SDK 已保证 display_name 唯一。Python 示例 中的重复匹配分支不会被触发:
调用方无需为重复结果保留额外分支。 创建用户时仍需处理重名错误。并发创建可能发生竞争,请捕获 WujiException。

删除当前用户

删除当前用户后,SDK 自动切换到默认用户: 删除操作不会留下悬空的当前用户指针。该用户的标定数据也会被删除,请确认数据不再需要。

默认用户不可删除

不存在的用户 ID 会触发错误

SDK 不会自动切换到默认用户。

用户切换在进程和语言之间生效

例如:
  1. C 程序执行 ./3_user_management --default-user,切到 Default
  2. 启动一个全新的 Python 进程读 current_user()
结果为 Default,user_id 为 ''。C 程序创建的用户也会立即出现在 Python 的 list_users() 结果中,description 字段保持不变:
两个语言接口读写同一份 registry.toml,不会维护独立缓存。

导出前需要标定数据

对未完成标定的用户调用 export_user_data:
export_user_data(user_id, out_path) 的两个参数均为必填。

错误处理速查

命令行工具可以捕获 WujiException 并以非零退出码结束。向用户显示异常消息即可,无需输出完整堆栈。

扩展用法

标定之前先确认用户

标定前先显示当前用户,确认标定数据写入正确的用户:

迁移标定结果到另一台机器

export_user_data 打包,preview_user_data 在目标机上先看内容,确认无误再 import_user_data。导入会按需重建用户,不用先手工建好同名用户。

用 external_id 关联外部系统

用户 dict 里有 external_id 字段,示例没用到。如果需要关联外部账号系统,请使用 external_id 保存外部主键,不要使用 display_name 作为唯一关联键。

脚本化时避开交互

两个示例都是命令行工具。--list 成功时返回 0,失败时返回 1,可用于脚本判断。

相关内容