用Windows的“任务计划程序”执行Python脚本文件

Python019

用Windows的“任务计划程序”执行Python脚本文件,第1张

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

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

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

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

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

其实这个跟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实际的脚本位置在哪里,否则就会出现找不到目标文件的错误。如果脚本中没有牵涉到类似的目录位置等情况时(实际情况是这样的定时脚本大概率会遇到文件输入输出问题),此项大可以不填。

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

因为windows默认使用gbk作为默认字符编码格式,所以python以utf8写入失败。

这里强制python打开windows文件的时候,以utf8格式。

Error occurs when trying to redirect Python UTF-8 stdout to a file on Windows - Stack Overflow

Python: Use the UTF-8 mode on Windows! - DEV Community

1. Command line and environment — Python 3.9.6 documentation

问题:按照网上的教程,设置了自动执行的任务,虽然脚本能运行,但是py文件并没有产生日志文件。

解决方法:在程序或脚本中 填写python.exe的绝对地址,我这里填写的是虚拟环境下的python地址

添加参数 : 这里填写脚本wind.py的绝对位置

起始于: 填写的是 日志产生文件的 位置。

由于我的脚本位置和 日志产生的位置是一样的。所以对于文件位置不一样的可能没有参考意义。

下面是运行后的结果: