如何在Python中调用CMD执行指定UiPath RPA机器人脚本?
在Python中调用CMD执行UiPath机器人并后续执行API任务
我经常在Python API项目里集成UiPath机器人,正好可以给你一套实用的实现方案,确保机器人跑完之后再执行后续的API数据获取任务。
核心实现思路
我们用Python标准库的subprocess模块来调用外部命令,它能帮我们阻塞等待机器人执行完成,完美契合你“先跑RPA,再做API任务”的需求。
代码示例
import subprocess import requests # 假设你用requests做API数据获取 def run_uipath_robot(): # 定义UiRobot路径和流程文件路径,用原始字符串避免转义问题 uirobot_path = r"C:\Users\AppData\Local\UiPath\app-19.7.0\UiRobot.exe" xaml_file_path = r"C:\Users\Documents\UiPath\ThirdProcess\Main.xaml" # 把命令拆分成列表(推荐这种方式,避免shell注入风险) command = [uirobot_path, "/file", xaml_file_path] try: # 执行命令并等待完成,check=True会在命令执行失败时抛出异常 result = subprocess.run( command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) print("UiPath机器人执行成功,输出:") print(result.stdout) return True except subprocess.CalledProcessError as e: print(f"UiPath机器人执行失败,错误信息:{e.stderr}") return False # 主流程:先跑机器人,成功后执行API任务 if __name__ == "__main__": if run_uipath_robot(): print("开始执行API数据获取任务...") # 这里替换成你的API逻辑 api_response = requests.get("https://your-api-endpoint.com/data") if api_response.status_code == 200: data = api_response.json() print(f"成功获取API数据:{data}") else: print(f"API请求失败,状态码:{api_response.status_code}") else: print("机器人执行失败,终止后续API任务")
关键细节说明
- 路径处理:用原始字符串
r""包裹路径,避免Python把反斜杠当成转义字符导致路径错误。 - 阻塞执行:
subprocess.run()默认会等待外部命令执行完成再继续往下走,正好保证机器人跑完才开始API任务。 - 错误捕获:添加
check=True和异常捕获,能及时发现机器人执行失败的情况,避免无效的API调用。 - 输出捕获:通过
stdout和stderr参数可以捕获机器人的执行日志,方便调试和排查问题。
额外注意事项
- 确保你的Python进程有足够权限访问UiRobot.exe和XAML文件路径。
- 如果你的UiPath版本更新了,记得同步修改
uirobot_path里的版本号(比如app-19.7.0)。 - 如果需要后台执行机器人不阻塞(不过你这里不需要),可以用
subprocess.Popen(),但你当前场景用run()更合适。
内容的提问来源于stack exchange,提问作者shubham jain




