影刀RPA 系统定时任务Windows计划任务配置署名林焱什么情况用什么影刀RPA本身有定时触发功能但有时需要更灵活的调度——让Windows系统在指定时间自动执行Python脚本、或配合影刀命令行启动流程。场景推荐方式特点影刀流程定时执行影刀客户端定时触发最简单需客户端运行Windows系统级定时任务计划程序不依赖影刀客户端Python脚本定时schedule库进程内定时灵活怎么做一用Python创建Windows计划任务importsubprocessdefcreate_scheduled_task(task_name,python_script_path,scheduleDAILY,start_time09:00,enabledTrue):创建Windows计划任务# Python解释器路径python_exerC:\Users\32108\.workbuddy\binaries\python\envs\default\Scripts\python.exe# schtasks命令cmd[schtasks,/Create,/TN,task_name,# 任务名/TR,f{python_exe} {python_script_path},# 执行命令/SC,schedule,# 频率: DAILY, WEEKLY, MONTHLY, ONCE, ONSTART, ONLOGON/ST,start_time,# 开始时间/F# 强制覆盖已存在的任务]ifnotenabled:cmd.extend([/DISABLE])resultsubprocess.run(cmd,capture_outputTrue,textTrue)ifresult.returncode0:print(f计划任务创建成功:{task_name})returnTrueelse:print(f创建失败:{result.stderr})returnFalse# 创建每天9点执行的采集任务create_scheduled_task(task_nameRPA_每日采集,python_script_pathrD:\项目\scripts\daily_collect.py,scheduleDAILY,start_time09:00)# 创建每周一执行的周报任务create_scheduled_task(task_nameRPA_周报生成,python_script_pathrD:\项目\scripts\weekly_report.py,scheduleWEEKLY,start_time08:00# 还需要指定 /D MO 表示周一)# 创建每周一的周报任务完整参数subprocess.run([schtasks,/Create,/TN,RPA_周报,/TR,f{python_exe} D:\\项目\\scripts\\weekly_report.py,/SC,WEEKLY,/D,MO,# 周一/ST,08:00,/F])二管理计划任务店群矩阵自动化突破运营极限importsubprocess# 查看所有计划任务deflist_tasks():resultsubprocess.run([schtasks,/Query,/FO,CSV,/V],capture_outputTrue,textTrue)returnresult.stdout# 查看指定任务defget_task(task_name):resultsubprocess.run([schtasks,/Query,/TN,task_name,/FO,LIST,/V],capture_outputTrue,textTrue)ifresult.returncode0:returnresult.stdoutreturnNone# 删除任务defdelete_task(task_name):resultsubprocess.run([schtasks,/Delete,/TN,task_name,/F],capture_outputTrue,textTrue![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/51a676bdfb3b45de819d1e780c404ece.png#pic_center))returnresult.returncode0# 立即运行任务defrun_task_now(task_name):resultsubprocess.run([schtasks,/Run,/TN,task_name],capture_outputTrue,textTrue)returnresult.returncode0# 启用/禁用任务defenable_task(task_name,enableTrue):action/ENABLEifenableelse/DISABLEresultsubprocess.run([schtasks,/Change,/TN,task_name,action],capture_outputTrue,textTrue)returnresult.returncode0# 使用print(get_task(RPA_每日采集))run_task_now(RPA_每日采集)三用schedule库做进程内定时importscheduleimporttimeimportthreading# 定义任务defjob_daily_collect():print(执行每日采集...)# 实际调用影刀流程或采集逻辑importsubprocess subprocess.run([rC:\Users\32108\.workbuddy\binaries\python\envs\default\Scripts\python.exe,rD:\项目\scripts\daily_collect.py])defjob_data_cleanup():print(执行数据清理...)# 设置定时schedule.every().day.at(09:00).do(job_daily_collect)schedule.every().day.at(23:00).do(job_data_cleanup)schedule.every().monday.at(08:00).do(job_daily_collect)# 额外周一执行schedule.every(30).minutes.do(job_data_cleanup)# 每30分钟# 在后台线程运行defrun_scheduler():whileTrue:schedule.run_pending()time.sleep(60)# 每分钟检查一次threadthreading.Thread(targetrun_scheduler,daemonTrue)thread.start()# 主线程继续做其他事print(定时任务已启动...)四配合影刀命令行启动importsubprocessimportosdeftrigger_yingdao_flow(flow_name,paramsNone):通过命令行触发影刀流程# 影刀命令行工具路径根据安装位置调整yingdao_exerC:\Program Files\Yingdao\YingdaoRPA\YingdaoRPA.exe# 构建命令cmd[yingdao_exe,/run,flow_name]ifparams:forkey,valueinparams.items():cmd.extend([f--{key},str(value)])# 执行resultsubprocess.run(cmd,capture_outputTrue,textTrue,timeout3600)ifresult.returncode0:print(f流程执行成功:{flow_name})returnTrueelse:print(f流程执行失败:{result.stderr})returnFalse# 在计划任务脚本中调用if__name____main__:trigger_yingdao_flow(每日数据采集,{date:2024-06-15})完整流程定时任务管理器importsubprocessimportosfromdatetimeimportdatetime# yd_input: action, task_name, script_path, schedule, timeactionyd_input.get(action,list)# list/create/delete/run/enable/disabletask_nameyd_input.get(task_name,RPA_Task)script_pathyd_input.get(script_path,)schedule_typeyd_input.get(schedule,DAILY)# DAILY/WEEKLY/MONTHLY/ONCErun_timeyd_input.get(time,09:00)python_exerC:\Users\32108\.workbuddy\binaries\python\envs\default\Scripts\python.exedefrun_schtasks(args):cmd[schtasks]args resultsubprocess.run(cmd,capture_outputTrue,textTrue)returnresult.returncode0,result.stdout,result.stderrifactionlist:ok,out,errrun_schtasks([/Query,/FO,CSV])tasks[lineforlineinout.split(\n)ifRPA_inline]yd_output{status:ok,tasks:tasks}elifactioncreate:ifnotscript_path:yd_output{status:error,message:缺少script_path}else:cmd[/Create,/TN,task_name,/TR,f{python_exe} {script_path},/SC,schedule_type,/ST,run_time,/F]ifschedule_typeWEEKLY:cmd.extend([/D,MO])# 默认周一ok,out,errrun_schtasks(cmd)yd_output{status:okifokelseerror,message:outifokelseerr}elifactiondelete:ok,out,errrun_schtasks([/Delete,/TN,task_name,/F])yd_output{status:okifokelseerror,message:outifokelseerr}elifactionrun:ok,out,errrun_schtasks([/Run,/TN,task_name])yd_output{status:okifokelseerror}elifactiondisable:ok,out,errrun_schtasks([/Change,/TN,task_name,/DISABLE])yd_output{status:okifokelseerror}elifactionenable:ok,out,errrun_schtasks([/Change,/TN,task_name,/ENABLE])yd_output{status:okifokelseerror}有什么坑坑一计划任务执行时找不到Python包现象计划任务执行Python脚本时报ModuleNotFoundError但手动运行没问题。原因计划任务以SYSTEM用户运行时环境变量和用户profile不同找不到虚拟环境中安装的包。解决用完整路径的Python解释器或创建批处理文件设置环境# 方案1用虚拟环境的完整Python路径python_exerC:\Users\32108\.workbuddy\binaries\python\envs\default\Scripts\python.exe# 不要用 python 或 python.exe# 方案2创建bat文件设置环境变量再执行bat_contentfecho off set PYTHONPATHC:\\Users\\32108\\.workbuddy\\binaries\\python\\envs\\default\\Lib\\site-packages {python_exe} {script_path} bat_pathrD:\项目\scripts\run_task.batwithopen(bat_path,w)asf:f.write(bat_content)# 计划任务执行bat文件# schtasks /Create /TN Task /TR D:\项目\scripts\run_task.bat ...坑二计划任务运行但脚本没有输出现象计划任务显示上次运行结果成功但脚本应该生成的文件没有生成。原因计划任务的工作目录默认是C:\Windows\System32脚本中的相对路径找不到文件。解决脚本中用绝对路径或在bat文件中切换工作目录temu店群自动化报活动案例# bat文件设置工作目录bat_contentfecho off cd /d D:\\项目\\scripts {python_exe} daily_collect.py # Python脚本中用绝对路径frompathlibimportPath script_dirPath(__file__).parent data_filescript_dir/data/input.xlsx# 基于脚本位置的绝对路径坑三schtasks命令需要管理员权限现象创建计划任务时报错误: 拒绝访问。原因schtasks /Create需要管理员权限。解决以管理员身份运行或用XML方式创建# 方案1Python脚本以管理员身份运行右键→以管理员身份运行# 方案2用XML定义任务通过注册方式创建不需要管理员# 用XML定义任务xml_contentf?xml version1.0 encodingUTF-16? Task xmlnshttp://schemas.microsoft.com/windows/2004/02/mit/task Triggers CalendarTrigger StartBoundary2024-06-15T{run_time}:00/StartBoundary Schedule Daily DaysInterval1/DaysInterval /Daily /Schedule /CalendarTrigger /Triggers Actions Exec Command{python_exe}/Command Arguments{script_path}/Arguments WorkingDirectoryD:\\项目\\scripts/WorkingDirectory /Exec /Actions Settings Enabledtrue/Enabled AllowStartIfOnBatteriestrue/AllowStartIfOnBatteries DontStopIfGoingOnBatteriestrue/DontStopIfGoingOnBatteries /Settings /Task # 注册任务xml_pathrD:\temp\task.xmlwithopen(xml_path,w,encodingutf-16)asf:f.write(xml_content)subprocess.run([schtasks,/Create,/TN,task_name,/XML,xml_path,/F])坑四电脑休眠时任务不执行现象设置了每天早上8点执行但电脑晚上休眠了早上开机后任务没有补执行。解决设置唤醒计算机运行此任务# 在XML中添加唤醒设置# Settings# WakeToRuntrue/WakeToRun# /Settings# 或在任务计划程序GUI中勾选唤醒计算机运行此任务![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7b7e5fa188bb4dc1b0771bfebde6566d.png#pic_center)# 如果是休眠/关机导致错过设置如果计划任务错过尽快补执行# XML中添加# Settings# StartWhenAvailabletrue/StartWhenAvailable# /Settings