windows定时任务执行python失败_用Windows的“任务计划程序”执行Python脚本文件

导语

网上其实能找到很多的相关内容,但是由于很多文章都是复制粘贴的,其中有一个问题他们都没有说清楚,所以这里我想分享一点自己在设置时候的一些心得体会。

一个问题

整个任务计划设置一路下一步就ok了,几乎Xp之后每个版本的Windows设置都是差不多的。稍微提一下,创建基本任务和创建任务的区别是一个有引导界面,一个直接弹出设置界面直接设置。

创建基本任务.PNG

创建任务.jpg

出问题的是在这个界面的设置方法:

启动程序设置.PNG

这里先引用一段其他文章里的设置方法:

这里解释一下三个文本框内容的含义,【程序或脚本】文本框中填的是Python编译器的名称,一般就是python.exe,【起始于】文本框中填的是Python编译器的目录,上图中假设你的Python编译器的完整路径是“C:\Python27\python.exe”,【添加参数】文本框中填的是你的Python程序的完整路径,这里假设在C盘的Users文件夹下面有一个叫做code.py的文件。如果你的Python程序包含命令行参数,将其添加到Python程序的完整路径之后即可。

上面的设置里问题还是挺多的,特别是关于起始于的解释。事实上这里的起始于并不是填写编译器所在的目录,编译器所在的目录实际上应该是在程序与脚本中就已经填写过了。而这里起始于要填写的内容应该是

被编译的python文件所在目录的位置

同时,我们注意到,这里的选项后面有一个(可选),意思是如果此处不填的话(缺省状态),那么自动将该处的目录位置定位到起始执行目录的位置(在任务计划程序执行的过程中通常是编译器所在的目录位置)。

为什么?

其实这个跟python的一个内置模块有关。

os模块下我们经常用到的os.getcwd(),用于获取脚本当前目录位置;

而os.path.pardir可以获得当前脚本目录的上一级目录。

他们在一般双击运行的情况下的输出为(举例):

D:\Python\

..

而当使用编译器运行python脚本和直接双击执行python脚本时,os.getcwd()的输出结果是不一样的:

D:\Python\

C:\Users\yyaaa\AppData\Local\Programs\Python\

换句话说,在使用编译器执行时(即在cmd中执行 python D:\Python\path.py),os.getcwd()取的是python编译器所在的目录。更一般的讲,os.getcwd()本身这个方法,返回的是当前执行python文件的文件目录,os.path.pardir同理。一般情况下,打开脚本时,cmd会自动定位到当前脚本所在位置,类似使用了命令cd D:\Python\,所以执行目录就在脚本位置,所以输出D:\Python\;而当用任务计划程序执行时,其本质就是在cmd中将参数拼接,形成python D:\Python\path.py这样的一条命令来运行程序,所以此时他返回的python的执行文件目录,就是python的安装目录C:\Users\yyaaa\AppData\Local\Programs\Python\。

因此我们需要定义起始于这个参数来告诉Windows实际的脚本位置在哪里,否则就会出现找不到目标文件的错误。如果脚本中没有牵涉到类似的目录位置等情况时(实际情况是这样的定时脚本大概率会遇到文件输入输出问题),此项大可以不填。

总结

现在重新对这里的设置进行总结:

程序或脚本:Python编译器所在的位置

添加参数(可选):被执行脚本所在的完全位置,如果有参数接上参数,如D:\abc\abc.py -a -b

起始于(可选):被执行脚本所在目录的位置,如D:\abc

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值