在流程中经常需要跨子流程共享数据,比如登录后的用户信息、采集过程中动态变化的关键词、错误计数等。新手喜欢用“设置变量”到处传,结果子流程一多就乱。
核心方法:用“全局变量”存储跨流程共享的数据,用“动态参数”在运行时改变行为,两者配合实现灵活配置。
一、全局变量 vs 普通变量 vs 流程参数
| 类型 | 作用域 | 生命周期 | 适用场景 |
|------|--------|---------|---------|
| 普通变量 | 当前子流程内 | 子流程结束时销毁 | 临时计算、循环计数 |
| 流程参数 | 子流程调用时传入/传出 | 随调用结束 | 子流程间显式传值 |
| 全局变量 | 整个应用所有流程 | 应用运行期间一直存在 | 配置项、跨子流程状态 |
原则:能用流程参数的优先用流程参数。只有多个不相关的子流程都需要共享同一份数据时,才用全局变量。
二、全局变量的基础操作
设置全局变量
- 左侧指令面板搜索“设置全局变量”
2. 变量名建议用大写+下划线(如
CONFIG_PATH)
- 值可以是文本、数字、列表、字典等
# 设置全局变量示例

设置全局变量:APP_NAME = "拼多多采集助手"
设置全局变量:MAX_RETRY_COUNT = 3
设置全局变量:LOG_FOLDER = "C:\logs"
设置全局变量:USER_INFO = {"name": "林焱", "role": "admin"}
获取全局变量
在其他子流程中,用“获取全局变量”指令读取。
# 在任意子流程中
获取全局变量:MAX_RETRY_COUNT → 存入“最大重试次数”
输出日志:"最大重试次数为:{最大重试次数}"
注意: 修改全局变量用“设置全局变量”覆盖,删除用“删除全局变量”。
三、实战场景1:跨子流程共享配置
一个采集应用有多个配置项:文件保存路径、超时时间、是否启用通知。用全局变量集中管理。
# B01_InitConfig 初始化子流程
设置全局变量:EXPORT_PATH = "C:\采集结果"
设置全局变量:TIMEOUT_SECONDS = 10
设置全局变量:ENABLE_NOTIFICATION = True
设置全局变量:KEYWORDS_LIST = ["手机", "电脑", "平板"]
# C01_Collect 采集子流程
获取全局变量:TIMEOUT_SECONDS → 存入“超时”
等待元素出现://div[@class='result'],超时={超时}
# D01_Export 导出子流程
获取全局变量:EXPORT_PATH → 存入“路径”

Excel Workbook保存:文件路径={路径}
# E01_SendReport 发送报告子流程
获取全局变量:ENABLE_NOTIFICATION → 存入“是否通知”
如果 是否通知 == True
发送飞书消息...
好处: 修改配置只用在B01_InitConfig里改一处,所有子流程自动生效。
四、实战场景2:动态控制流程行为(开关标志)
在调试或特殊情况下,想跳过某些耗时步骤,用全局变量做开关。
# 在初始化中设置调试模式
设置全局变量:DEBUG_MODE = True # 正式运行时改为False
# C01_CollectList 采集列表
获取全局变量:DEBUG_MODE → 存入“调试中”
如果 调试中 == True
输出日志:"调试模式:只采集前5条"
循环固定次数:5
# 采集逻辑
否则

# 正常采集全部(循环列表)
循环列表:商品列表
# 采集逻辑
其他开关示例:
SKIP_LOGIN:跳过登录(已有cookie时)SAVE_SCREENSHOT:是否保存错误截图USE_MOCK_DATA:使用模拟数据测试
五、实战场景3:累加统计(成功数、失败数)
跨子流程累计采集成功和失败的数量,最后生成报告。
# B01_Init 初始化
设置全局变量:SUCCESS_COUNT = 0
设置全局变量:FAIL_COUNT = 0
# C01_CollectItem 采集单个商品(在循环中调用)
Try
# 采集逻辑...
# 成功时
获取全局变量:SUCCESS_COUNT → 存入“当前成功”
当前成功 = 当前成功 + 1
设置全局变量:SUCCESS_COUNT = {当前成功}
Catch
获取全局变量:FAIL_COUNT → 存入“当前失败”
当前失败 = 当前失败 + 1
设置全局变量:FAIL_COUNT = {当前失败}
# D01_GenerateReport 最后报告
获取全局变量:SUCCESS_COUNT → 成功数
获取全局变量:FAIL_COUNT → 失败数
输出日志:"采集完成,成功{成功数},失败{失败数}"
注意: 多个子流程同时修改同一个全局变量时,可能会有竞态条件。影刀是单线程顺序执行,一般没问题。但如果用了多线程(企业版),需要加锁。
六、实战场景4:存储复杂数据(列表、字典)
全局变量可以存列表,在多个子流程间传递和修改。
# B01_Init
设置全局变量:ERROR_LOG = [] # 空列表
# C01_CollectList 循环中
Try
# 采集...
Catch
获取全局变量:ERROR_LOG → 存入“错误列表”
错误列表.append({"时间": 当前时间, "错误": 异常信息, "商品": 当前商品})
设置全局变量:ERROR_LOG = {错误列表}
# E01_WriteErrors
获取全局变量:ERROR_LOG → 存入“错误列表”
如果 错误列表的长度 > 0
Excel Workbook打开...
循环列表:错误列表
写入行数据到表格:[当前项.时间, 当前项.错误, 当前项.商品]
七、动态参数:不修改流程改变行为
不想改流程代码,只想在运行时改变某个值(比如搜索关键词)。可以用“输入参数”让用户运行前填写。
操作步骤
- 在主流程
A_Main中点击“流程参数” - 添加输入参数,如
关键词(文本)、采集页数(数字,默认5) - 在流程中使用
{关键词}和{采集页数} - 发布应用时,勾选“允许用户修改输入参数”
# A_Main 中
输出日志:"开始采集,关键词:{关键词},页数:{采集页数}"
调用子流程:C01_SearchAndCollect
输入参数:关键词={关键词},页数={采集页数}
用户运行时:
会弹出一个对话框,可以输入“苹果手机”和“10页”,不用修改流程。
八、动态参数与全局变量的结合
把用户输入的动态参数存入全局变量,供后续所有子流程使用。
# A_Main
# 假设已有输入参数:关键词, 页数, 是否导出图片
设置全局变量:CURRENT_KEYWORD = {关键词}
设置全局变量:MAX_PAGES = {页数}
设置全局变量:EXPORT_IMAGES = {是否导出图片}
# 后续所有子流程通过全局变量读取
九、全局变量的调试技巧
技巧1:在关键位置输出全局变量
获取全局变量:SUCCESS_COUNT → 成功数
输出日志:"当前成功数:{成功数}"
技巧2:在catch块中输出全局变量快照
Catch
获取全局变量:SUCCESS_COUNT → 成功数
获取全局变量:FAIL_COUNT → 失败数
输出日志:"出错时状态:成功={成功数},失败={失败数},错误={异常信息}"
技巧3:用“删除全局变量”重置状态
重复运行同一应用时,旧的全局变量可能残留。在流程开头先删除再初始化。
# A_Main 开头
删除全局变量:SUCCESS_COUNT
删除全局变量:FAIL_COUNT
删除全局变量:ERROR_LOG
# 然后再初始化
设置全局变量:SUCCESS_COUNT = 0
设置全局变量:FAIL_COUNT = 0
设置全局变量:ERROR_LOG = []
十、常见误区
误区1:滥用全局变量代替流程参数
# 不推荐:用全局变量传值
设置全局变量:CURRENT_KEYWORD = "手机"
调用子流程:C01_Search # 内部去读 CURRENT_KEYWORD
# 推荐:用输入参数
调用子流程:C01_Search
输入参数:关键词="手机"
问题: 全局变量隐式依赖,子流程无法独立测试,多线程乱套。
误区2:忘记初始化就使用
# 错误:直接获取还没设置的全局变量
获取全局变量:USER_NAME → 存入“用户名” # 可能是None
# 正确:先判断是否存在
判断全局变量是否存在:USER_NAME → 存入“是否存在”
如果 存在 == False
设置全局变量:USER_NAME = "默认用户"
误区3:在子流程里修改全局变量影响其他地方
全局变量是共享的,修改前要想清楚是否会影响其他正在运行的子流程。如果只是临时计算,用普通变量。
十一、全局变量命名规范
| 类型 | 命名格式 | 示例 |
|---|---|---|
| 配置常量 | 全大写+下划线 | MAX_RETRY, EXPORT_PATH |
| 状态变量 | 首字母大写驼峰 | SuccessCount, IsRunning |
| 列表/字典 | 加后缀 | ErrorList, ConfigDict |
| 开关标志 | Is/Has开头 | IsDebugMode, HasLogin |
十二、易错速查表
| 错误现象 | 原因 | 解决方法 |
|---|---|---|
| 获取到None | 变量未设置 | 用前判断或初始化 |
| 修改后没有变化 | 改完后没重新设置 | 必须用“设置全局变量”覆盖 |
| 多个子流程读到的值不一致 | 中间被其他子流程修改了 | 检查是否有意外的修改 |
| 应用重新运行残留旧值 | 全局变量未清理 | 开头用“删除全局变量” |
| 调试时看不到全局变量 | 变量面板默认不显示 | 在“变量”面板勾选“显示全局” |
十三、推荐资源
- 影刀官方帮助中心:搜索“全局变量”有视频教程
- 我的经验:全局变量控制在5个以内,超过说明流程设计可以优化
- 进阶:结合“流程日志系统”把全局变量的变化写入日志,便于追溯
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
