断开笔记本连接时Windows VM中Python与任务计划程序运行Alteryx工作流失败如何解决
问题根因
你遇到的报错和异常本质是两个原因叠加:
- PyAutoGUI依赖活动的可视化桌面会话才能正常模拟键盘鼠标操作。当你断开RDP远程连接时,Windows会自动关闭当前用户的活动桌面会话,没有可交互的GUI界面,PyAutoGUI的模拟操作会直接失效。
- 断开会话后系统的虚拟显示坐标会发生异常,PyAutoGUI默认的故障保护机制检测到鼠标被移到屏幕角落,就触发了
FailSafeException终止运行。
临时修复方案(适配现有脚本逻辑)
如果不想改现有脚本的整体逻辑,可以按下面三步调整:
- 调整PyAutoGUI配置,在脚本导入模块后立刻新增两行配置:
import pyautogui as pg pg.FAILSAFE = False # 关闭角落触发的故障保护 pg.FAILSAFE_POINTS = [] # 清空故障保护触发点 import os import time # 后面保持原有代码不变 time.sleep(10) os.startfile("C:\\Users\\my_name\\Desktop\\Python Test Workflow.yxmd") time.sleep(45) #build in enough time for Alteryx to open the workflow pg.hotkey('ctrl', 'r') time.sleep(10)
- 调整Windows任务计划程序配置:
- 打开任务属性,切换到「常规」标签页,勾选只在用户登录时运行
- 切换到「条件」标签页,取消勾选只有在计算机使用交流电源时才启动此任务
- 切换到「设置」标签页,勾选唤醒计算机运行此任务
- 修改断开远程的方式:不要直接点RDP窗口右上角的叉关闭连接,新建一个
disconnect.bat文件,内容如下,每次要断开远程时双击运行即可,这个命令会把当前远程会话转接到本地控制台,不会销毁桌面会话:
tscon %sessionname% /dest:console
长期稳定方案(推荐)
完全放弃GUI模拟的逻辑,用Alteryx自带的命令行运行引擎执行工作流,不需要任何界面交互,稳定性高很多,直接替换原有Python脚本即可:
import subprocess # 按实际安装路径修改Alteryx引擎路径和工作流路径 alteryx_engine_path = r"C:\Program Files\Alteryx\bin\AlteryxEngineCmd.exe" workflow_path = r"C:\Users\my_name\Desktop\Python Test Workflow.yxmd" # 直接调用引擎运行工作流 run_result = subprocess.run([alteryx_engine_path, workflow_path], capture_output=True, text=True) # 打印运行日志可用于排查问题 print("运行输出:", run_result.stdout) if run_result.stderr: print("运行错误:", run_result.stderr)
该方案不需要调整任务计划程序的额外配置,也不受远程连接断开的影响。
内容的提问来源于stack exchange,提问作者Gentry
相关产品推荐
相关产品推荐

