如何编写bat脚本定时执行某python脚本

Python0107

如何编写bat脚本定时执行某python脚本,第1张

@echo off

rem 这里的D:和D:\Python 是Python文件所在的盘及路径

D:

cd D:\Python

python test.py

pause

exit

Windows

创建一个batch文件,比如python_auto.bat,在里面输入要执行的脚本,比如python

xxx.py。保存。右键这个batch文件创建一个快捷方式,把它拖动到C:\Users\

\AppData\Roaming\Microsoft\Windows\Start

Menu\Programs\Startup

中。重启系统的时候就会自动执行了。当然你也可以用系统自带的任务执行器来定时执行这个batch文件。

Linux

创建一个shell文件,比如python_auto.sh,在里面同样输入要执行的脚本。然后打开编辑/etc/profile:

sudo vim /etc/profile

# Add the following line to the end of the file

. /home/xxx/python_auto.sh保存之后重启系统就可以自动执行了。

大图请右击在新标签页打开

Popen默认shell参数为False:

为True时默认使用 COMSPEC 环境变量指定的程序为shell:

在Windows上默认为cmd:

args参数为命令字符串时,因为dir是cmd的内建命令,需要指定shell=True:

例如:

而timeout,ping等都是独立的exe,可以不需要cmd:

args参数是文件路径形式时:

底层是调用了Windows的API,如下:

调试:

测试:

从调试结果以及测试来看,对于bat文件,可以不写lpApplicationName参数,Windows会自动使用cmd来运行(使用vbs文件测试返回错误:不是正确的win32程序,要指定lpApplicationName为cscript.exe才行,可能只有bat才有这个特权了)。

输入重定向的问题:

Popen是用创建子进程的方式来执行的,而timeout.exe在暂停时,可接受用户按键来终止,这个时候会需要输入,但是Popen给子进程的stdin只有

并不能让timeout重定向到用户输入上,所以出错。

解决的方法有很多,最简单的替换掉timeout语句为ping -w xxx 127.0.0.1 或者直接由python来接管timeout。