如何在Robot Framework中运行并手动终止Python脚本?
在Robot Framework中运行Python脚本并手动终止的解决方案
你的代码核心问题是Run Process默认会阻塞执行——它会一直等待main.py运行结束才继续往下走,导致后续写入events的循环根本没机会执行,自然没法实现手动终止的需求。下面是修正后的方案:
关键修改思路
- 让Python脚本后台运行,避免阻塞Robot的执行流程
- 保存进程句柄,精准终止目标进程(而非终止所有进程)
- 加入手动交互步骤,由你确认时机后再终止脚本
修正后的完整代码
*** Settings *** Library JSONLibrary Library OperatingSystem Library Process Library Dialogs # 用于弹出交互框,等待用户确认终止时机 *** Variables *** @{events} READY_TO_WAIT STARTING COMPLETE ${MAIN_SCRIPT_PATH} ${CURDIR}${/}main.py *** Test Cases *** Testcase with correct events and check final state Manage background process and write events Validate final state is DONE *** Keywords *** Manage background process and write events # 后台启动main.py,保存进程对象以便后续终止 ${target_process}= Run Process ${MAIN_SCRIPT_PATH} background=True Log 后台进程已启动,PID:${target_process.pid} # 循环写入事件到events.json FOR ${event} IN @{events} ${event_dict}= Create Dictionary event=${event} ${event_json}= Convert Json To String ${event_dict} Create File ${CURDIR}${/}events.json ${event_json} Log 已写入事件:${event} END # 弹出对话框,等待你确认后再终止进程 Input Dialog 确认操作完成后点击确定,将终止main.py title=手动终止确认 Log 开始终止目标进程 # 终止指定的后台进程 Terminate Process ${target_process} Log 目标进程已成功终止 Validate final state is DONE ${state_content}= Get File ${CURDIR}${/}state.txt Should Be Equal ${state_content} DONE
修改说明
- 新增Dialogs库:通过
Input Dialog弹出交互框,让你完全掌控终止进程的时机——确认操作完成后点击确定即可触发终止。 - 后台运行脚本:给
Run Process加上background=True参数,main.py会在后台运行,Robot可以继续执行后续的事件写入逻辑。 - 精准终止进程:保存启动后的
${target_process}对象,用Terminate Process只终止这个进程,比Terminate All Processes更安全,不会误杀其他无关进程。 - 优化命名:调整Keyword和变量名,让逻辑更清晰易懂。
内容的提问来源于stack exchange,提问作者Neyooo
相关产品推荐
相关产品推荐

