PYTHON

大家好,我在尝试通过 UiPath 运行一个 Python 文件时遇到了问题。文件运行正常,但执行到某个特定步骤时,Python 文件就会停止运行并卡住。不过,当我在 UiPath 中停止该流程后,Python 文件却会继续运行,简直像变魔术一样,并最终完成整个流程。但我必须先在 UiPath 中停止该流程。

你们知道为什么会这样吗?

嗨,@andros_torres_aranda

UiPath Python 会卡住,因为它会启动一个单独的 python.exe 进程,而该进程不会随 UiPath 一起停止。

点击停止时,UiPath 会结束自己的部分,但 Python 会继续在后台运行,直到任务完成。

快速解决方法:运行前在任务管理器中结束残留的 python.exe > 先在 cmd/PyCharm 中单独测试脚本 > 使用 Load Python Script + Invoke Method(而不是直接调用文件)> 在 Python 中添加 print/try-catch,以便发现卡住的位置 > 用 Try Catch + Terminate Workflow 包裹起来。也请更新 UiPath.Python.Activities 包。

嗨 @andros_torres_aranda

UiPath 会卡住,因为它会将 Python 作为独立的 python.exe 进程启动。当脚本阻塞或产生大量输出时,UiPath 会一直等待,但 python.exe 仍在后台运行。按下“停止”后,UiPath 会停止,但 Python 会继续运行并正常结束。

可以通过使用 Load Script + Invoke Method、减少返回的数据量、在 Python 中添加日志、升级 Python 包,以及在重新运行前结束残留的 python.exe 进程来解决。

如果这帮助你解决了问题,请将其标记为解决方案,这样也能帮助其他人。

嗨 @andros_torres_aranda

这是因为 UiPath 正在等待 Python 返回响应,但你的 Python 脚本仍在后台运行,因此 UiPath 认为它「卡住了」。

试试这样:

在脚本顶部添加以下内容。

import sys
sys.stdout = open(sys.devnull, ‘w’)

另外,务必从方法中返回一些内容。

使用以下活动调用:

  • Python Scope
  • Load Script
  • Invoke Python Method: main

最后,长时间运行的进程不要使用 Run Python Script

而是将所有内容封装在一个函数中,并使用 Invoke Python Method 调用它。

@andros_torres_aranda

你说 UiPath 卡住时,是变成了“未响应”,还是只是一直在运行?

如果只是一直在运行,可能是 Python 还在执行,而且脚本很大。

如果是“未响应”,可能是 UiPath 和 Python 同时运行导致 CPU 占用率过高。

结束 UiPath 进程却没有停止 Python,是因为它们是独立的进程。

祝好