You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

修改说明

  1. 新增Dialogs库:通过Input Dialog弹出交互框,让你完全掌控终止进程的时机——确认操作完成后点击确定即可触发终止。
  2. 后台运行脚本:给Run Process加上background=True参数,main.py会在后台运行,Robot可以继续执行后续的事件写入逻辑。
  3. 精准终止进程:保存启动后的${target_process}对象,用Terminate Process只终止这个进程,比Terminate All Processes更安全,不会误杀其他无关进程。
  4. 优化命名:调整Keyword和变量名,让逻辑更清晰易懂。

内容的提问来源于stack exchange,提问作者Neyooo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:35:23