我正在尝试运行python脚本来更新ppt演示文稿。一年前,我也尝试过在SQL中运行回归和更新表,也没有运行。我放弃了,因为我无法解决它。
我已经设法创建了一个bat文件来运行R代码在windows调度程序和工作。
我已经创建了bat文件,并在命令提示符下测试了它,如果py文件运行并更新了ppt演示。
当我在windows调度程序中运行这个bat文件时,它不会更新ppt。
当前bat文件如下:
@echo off
SET log_file=C:pythonlogfile.txt
echo on
call :logit >>log_file=%
exit /b 0
:logit
call C:ProgramDataAnaconda3Scriptsactivate.bat
cd C:python
python Updateppt.py
这些是我到目前为止尝试过的事情:
- 在bat文件中添加日志文件。日志文件被创建并添加了三个步骤,这样我就知道bat文件已经运行了。日志文件返回如下内容:
C:python>call C:ProgramDataAnaconda3Scriptsactivate.bat
(base) C:python>cd C:python
(base) C:python>python Updateppt.py
- 根据堆栈溢出的建议将bat文件编辑为各种组合。它们中的大多数都在命令提示符中工作,但没有一个在windows调度程序 中工作。
- 检查我保存信息的文件夹的安全设置,我有完全访问权限
- 确保将文件夹添加到环境变量的system和user部分的PYTHONPATH中
- 有一个R文件,当前通过windows调度程序的bat文件运行,所以要确保所有的一般,条件和设置部分在属性匹配
- 在所有包上重新运行pip install,以确保在运行py文件时它们是可访问的,并且位于正确的位置。这是基于以下建议:无法调度python脚本通过Windows任务调度程序 运行
- 计时命令提示符和windows调度程序任务,命令提示符需要30秒,而windows调度程序需要20秒
- 在python文件中添加了日志记录,当脚本启动时,它会记录日志,当在windows调度程序中运行时,它会记录时间,所以它正在运行python脚本
我能做些什么使它工作吗?我真的很茫然,我似乎找不到一个堆栈溢出响应,实际解决了我的问题
我在每个函数运行之后和最后一个函数之前添加了时间,日志文件显示,当它在windows调度程序中运行时,它不运行最后一个函数,而是循环回第一个函数。在命令提示符
中不会这样做。windows调度程序运行日志
INFO:root:run script started at 2022-04-29 13:18:31.318567
INFO:root:loaded enc data at 2022-04-29 13:18:32.072627
INFO:root:create enc_id at 2022-04-29 13:18:32.075627
INFO:root:agg data at 2022-04-29 13:18:59.782707
INFO:root:run script started at 2022-04-29 13:19:22.904437
INFO:root:loaded enc data at 2022-04-29 13:19:23.225462
INFO:root:create enc_id at 2022-04-29 13:19:23.228464
python命令提示日志
INFO:root:run script started at 2022-04-29 13:20:48.871881
INFO:root:loaded enc data at 2022-04-29 13:20:49.051893
INFO:root:create enc_id at 2022-04-29 13:20:49.054894
INFO:root:agg data at 2022-04-29 13:21:05.040096
INFO:root:run script stopped at 2022-04-29 13:21:05.436125
它应该汇总数据,然后导出到ppt,脚本将停止并运行'run script stopped'行。为什么它会在命令提示符中正确运行,而不是windows调度程序?
这是没有运行的代码
def update_ppt(CHW_daily):
daily_figures = Presentation(ResultPath+'Template/daily_figures_template.pptx')
# CHW table
slide_CHW = daily_figures.slides[0]
table_CHW = [shape for shape in slide_CHW.shapes if shape.has_table]
#Then we can update the values in each cell directly from the dataframe:
for i in range(1,8):
for j in range(0,6):
table_CHW[0].table.cell(i,j).text = str(CHW_daily.iloc[i-1, j])
table_CHW[0].table.cell(i,j).text_frame.paragraphs[0].font.size = Pt(14)
daily_figures.save(ResultPath+'daily_figures.pptx')
return()
问题是文件无法保存在网络驱动器中。错误提示找不到文件路径。我使用下面的代码解决了这个问题:
from pathlib import Path
ResultPath = Path(r'<network domain name>/Daily figures/')
ResultPath_str = str(ResultPath)
daily_figures = Presentation(ResultPath_str+'/'+Template/daily_figures_template.pptx')