起因 老板今天反映某APP又挂了,问什么回事。由于那台是windows服务器(服务器我最讨厌windows,没有之一),直觉告诉我--服务器日志又满了。 果不其然,C盘空间只剩下900多K,这种事情已
起因
老板今天反映某APP又挂了,问什么回事。由于那台是windows服务器(服务器我最讨厌windows,没有之一),直觉告诉我--服务器日志又满了。
果不其然,C盘空间只剩下900多K,这种事情已经不是头次了,公司也缺服务器点检和运维的人员,这事得想个办法一劳永逸。
我很自然的想到写段脚本定期去删除日志文件,非常简单,java和js都可以,但回头想想,前段时间不是老想学一下python吗,但苦于没有想写的东西,光看不入脑。我看,现在是个机会。
准备
知乎上看了一个pythoner的一些推荐,没有用现成的sublime去写脚本,我选择了用IDE,下了个pytharm,免费,应该挺好的。
python的话原来机器上就安装了2.7和3.6,在pytharm新建工程的时候选择了使用3.6的环境
搞起来
工程建好了,点击File菜单直接new了一个Python File,也就是常见的.py文件
百度了一下python的文件操作,嗯,用的是os.walk的api遍历文件夹,然后在遍历过程中用os.remove的api进行删除
代码如下:
#引入os包import os# 注释使用井号,嗯,蛮像一些配置文件的注释方法# 定义一个变量,设置我要删除的文件夹tempdir = 'c:' + os.sep + 'Windows' + os.sep + 'Temp'# 打印信息到控制台print('准备删除'+tempdir+'文件夹下的文件')# 用os.walk遍历文件,并执行os.remove删除for root, subdirs, files in os.walk(tempdir): for filename in files: print('正在删除文件:'+filename) # os.path.join是将路径与文件名合并,得到一个完整的文件地址 os.remove(os.path.join(root, filename))
想想缺点什么,像java一样,运行一个java类得有main()方法呀?python是否也一样?百度了一下,版本2出来了
#引入os包import os# 定义一个方法def deltempfile(): # 定义一个变量,设置我要删除的文件夹 tempdir = 'c:' + os.sep + 'Windows' + os.sep + 'Temp' # 打印信息到控制台 print('准备删除'+tempdir+'文件夹下的文件') # 用os.walk遍历文件,并执行os.remove删除 for root, subdirs, files in os.walk(tempdir): for filename in files: print('正在删除文件:'+filename) # os.path.join是将路径与文件名合并,得到一个完整的文件地址 os.remove(os.path.join(root, filename))# __name__是一个python变量,表示当前模块的名字,如果直接运行,那就是'__main__'if __name__ == '__main__': deltempfile()
看样子不错,但严谨的我知道并没有那么简单,temp文件夹中经常有些临时文件是一些程序进程正在使用的,无法删除,这样子调用os.remove肯定会碰到抛错。我要把异常捕捉起来,再百度一下,版本3如下
#引入os包import os# 定义一个方法def deltempfile(): # 定义一个变量,设置我要删除的文件夹 tempdir = 'c:' + os.sep + 'Windows' + os.sep + 'Temp' # 打印信息到控制台 print('准备删除'+tempdir+'文件夹下的文件') # 用os.walk遍历文件,并执行os.remove删除 for root, subdirs, files in os.walk(tempdir): for filename in files: print('正在删除文件:'+filename) try: # os.path.join是将路径与文件名合并,得到一个完整的文件地址 os.remove(os.path.join(root, filename)) except OSError: print('文件:'+filename+'被占用中,删除失败')# __name__是一个python变量,表示当前模块的名字,如果直接运行,那就是'__main__'if __name__ == '__main__': deltempfile()
到此大功告……一段落,接下来是部署
部署
这只是个自动维护的脚本,我也没空经常上服务器上跑一下这样子,那当然得让它每隔一段时间自动运行。windows服务器就这里方便些,打开自带的“计划任务”程序,添加一个计划任务,配置每周日执行一次,"python xxxxxxxxxx.py" (安装python后已配好Path变量,可以直接执行python命令),如下图
大功告成!手工往temp里丢一些文件,手工执行一下计划任务,完美!
归纳
python语法好简洁,但还算是很好理解的。代码行以回车分隔,并不需要像java一样打";"号。代码段用缩进处理,如java里边的for(){},到python只需要for xx in xxx: 以":"号标识一个代码段,的开始,以缩进控制代码段的结束。
其他倒没什么,就是变量定义不需要声明类型有点不习惯,所以说太简洁了!