Python 自动化实战手册
调用系统终端(cmd)
1.运用场景
有一些工具是使用命令行来执行的,这时可以调用系统终端来实现自动化
如:
swftool:http://www.swftools.org/(swf转换工具)
ffmpeg:https://ffmpeg.org/(视频转码工具)
2.实例
# pdf转swf
os.system('E:\swftools\pdf2swf.exe -b E:\swftools\pdf\%s.pdf -o E:\swftools\swf\%s.swf' % (name, name))
3.语法解释
-
import os
引入os模块,该模块主要提供与操作系统相关的功能的便捷式途径 -
os.system
可以在系统的子shell中执行命令,在windows上即相当于在cmd运行命令行,其返回值为命令退出的状态 -
os.system
运行命令行时无法实时显示运行过程,只能最终返回运行结果,这是和在cmd运行时的差别 -
使用
system
函数,会创建一个子进程,但是子进程无法影响父进程中的环境变量。简单来说,就是使用第一个system
函数用cd切换目录,第二个system
函数的环境变量仍然继承父进程的环境变量。所以第二个子进程的目录位置没有被第一条语句改变 -
关于新进程的生成和跟踪执行结果,往往用
subprocess
模块代替system
-
在
system
函数执行多条语句的方法,可以使用复合语句,如:os.system('cd path-to-repo && svn ci')
,即都在一个子进程中运行命令 -
或者使用
os.chdir
切换父进程的目录,再执行子进程
文件遍历筛选
1.运用场景
在自动化批量操作文件时,一定少不了文件遍历,并且可以筛选出需要的文件
2.实例
# 引入python的标准库os库
import os
# 遍历文件夹
def file(name):
# 初始化一个空列表存储文件
list_all = []
# 搜索一个目录下的所有文件夹和所有文件内的指定类型文件
for root, dirs, files in os.walk('E:\swftools\%s' % name):
# 获得文件名
for name in files:
# 加上文件路径
dir_path = os.path.join(root, name)
# 切割出文件名
dir_name = os.path.split(dir_path)[-1]
# 筛选文件
if '.pdf' or '.swf' in name:
list_all.append(dir_name)
return list_all
3.语法解释
os.walk(根目录)
可返回3元组 (dirpath, dirnames, filenames)【文件夹相对路径, 文件夹名字, 文件名】os.path.join
拼接路径os.path.split(path)
拆分路径为(head, tail)
服务器操作
1.运用场景
可以运用在将本地文件上传到服务器或者操作服务器上的文件,还可以调用服务器的终端(可用于在服务器上制作视频流)
2.实例
参考博客:
https://www.jianshu.com/p/486dd9993125
https://juejin.cn/post/6844904078057668615
import paramiko
# 建立ssh连接的同时,建立一个加密的文件传输通道
# 设置连接服务器信息
t = paramiko.Transport(("host(主机号)", 端口(一般为22)))
t.connect(username="用户名", password="密码")
# 将sshclient的对象的transport指定为以上的t,即进行ssh连接
ssh = paramiko.SSHClient()
ssh._transport = t
# ssh连接后在服务器终端运行命令,此处为复合语句
stdin, stdout, stderr = ssh.exec_command('cd /../var/www/;pwd;')
# 开启sftp通道,传输文件
sftp = ssh.open_sftp()
# 文件传输
sftp.put(localpath='本地路径', remotepath='远程路径’)
# 关闭通道
sftp.close
3. 语法解释
-
paramiko模块主要用于远程操作服务器,利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输
-
pip install paramiko
下载安装paramiko模块 -
使用paramiko模块有两种连接方式,一种是通过
paramiko.SSHClient()
函数,另外一种是通过paramiko.Transport()
函数 -
exec_command
函数调用会返回3个变量,其中stdout为标准输出,在输出内容比较少时,可以通过直接使用read读取出所有的输出 -
sftp用get函数即下载远程文件,put函数即上传本地文件
数据库操作
1.运用场景
筛选统计数据库,或者可以利用数据库批量快捷发布网站内容(如基于wordpress的站点)
2.实例
参考文章:https://www.runoob.com/python3/python3-mysql.html
(1)引入所需库
import pymysql
from sshtunnel import SSHTunnelForwa