引言
在Python自动化运维中,常会用到psutil模块,除了用来系统监控,也封装了linux 下 的大部分shell命令,本文将为大家分享Python自动化运维中常用到的几个模块与使用。
Python模块之Paramiko
1、介绍
paramiko 遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,可以实 现远程文件的上传,下载或通过ssh远程执行命令。
使用pip命令进行安装:
pip install paramiko
3、使用paramiko上传文件夹
#cat paramikosend.py
import paramiko,datetime,os #导入包
hostname = 'IP1' #上传文件到该服务器
username = 'root'
password = '123456'
port = 22
local_dir = '/root/paramiko' #本地路径
remote_dir = '/root/paramiko' #远程路径
try:
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
files = os.listdir(local_dir) #获取文件目录内容
for f in files:
sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f))
#上传文件,下载使用sftp.get
t.close()
except Exception as e:
print ("connect error!:",e)
4、使用paramiko执行命令
# cat paramikocommand.py1
#!/usr/bin/python
import paramiko
hostname = ' IP1' #远程登录服务器IP
username = 'root' #用户名
password = '123456' #密码
port = 22 #端口
ssh = paramiko.SSHClient() #实例化对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#允许连接不在 know_hosts文件中的机器
ssh.connect(hostname=hostname,port=port,username=username,password= password)
stdin, stdout, stderr = ssh.exec_command("ls -lrt") #执行命令
print stdout.readlines() #打印返回所有结果
ssh.close()
Python模块之Psutil
1、介绍
psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、 内存、磁盘、网络等)信息,它主要应用于系统监控。
2、安装
使用pip命令进行安装:
pip install psutil
3、获取cpu、磁盘等信息
import Psutilimport Psutil
#查看cpu所有信息
>>> psutil.cpu_times()
scputimes(user=11677.09, nice=57.93, system=148675.58, idle=2167147.79, iowait=260828.48, irq=7876.28, softirq=0.0, steal=3694.59, guest=0.0, guest_nice=0.0)
#获取磁盘完整信息
>>>psutil.disk_partitions()
>>>[sdiskpart(device='C:', mountpoint='C:', fstype='NTFS', opts='rw,fixed'),sdiskpart(device='D:', mountpoint='D:', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='E:', mountpoint='E:', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='F:', mountpoint='F:', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='G:', mountpoint='G:', fstype='NTFS', opts='rw,fixed')]
4、查看系统进程
#查看 系统所有进程ID
>>>psutil.pids()
#查看单个进程详细情况
>>> p = psutil.Process(372)#进程ID
>>> p.name
<bound method Process.name of psutil.Process(pid=372, name='smss.exe', started='08:26:07')>
#查看进程状态
>>> p.status()
'running'
#######进程其他信息获取方法#######
p.name() #进程名
p.exe() #进程的bin路径
p.cwd() #进程的工作目录绝对路径
p.status() #进程状态
p.create_time() #进程创建时间
p.uids() #进程uid信息
p.gids() #进程的gid信息
p.cpu_times() #进程的cpu时间信息,包括user,system两个cpu信息
p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就 好
p.memory_percent() #进程内存利用率
p.memory_info() #进程内存rss,vms信息
p.io_counters() #进程的IO信息,包括读写IO数字及参数
p.connectios() #返回进程列表
p.num_threads() #进程开启的线程数
Python模块之Pymssql
1、介绍
python连接sql server数据库,对数据库进行增删查改操作。
2、安装
使用pip命令进行安装:
pip install pymssql
3、使用pymssql 进行数据库查询
#!/usr/bin/python
# -*- coding: utf-8 -*-
##"获取虚拟化主机品牌型号内存等信息"
improt pymssql
class mysql:
def__init__(self,server,user,password,database):
self.server = server
self.user = user
self.password = password
self.database = database
def conn(self,server,user,password,database):
try:
with pymssql.connect(self.server, self.user, self.password,self.database,login_timeout=2) as conn:
# with conn.cursor(as_dict=True) as cursor:
cursor=conn.cursor()
cursor.execute('SELECT DNS_NAME,IP_ADDRESS,DATACENTER_ID FROM VPX_HOST')
#游标每次只能执行一条sql,多条sql需要多次实例化执行
result = cursor.fetchall()
for row in result:
print (row)
#with conn.cursor(as_dict=True) as cursor:
cursor=conn.cursor()
cursor.execute('SELECT * FROM VPXV_COMPUTE_RESOURCE')
nextResult=cursor.fetchall()
for row in nextResult:
print (row)
except Exception as e:
print ("db connect error:",e)
server = "IP2"
user = "XXXX"
password = "XXXX"
database = "szvcenterdb02"
exec_sql=msql(server,user,password,database)
exec_sql.conn(server,user,password,database)
Python模块之多线程threading
1、介绍
多线程类似于同时执行多个不同程序。
2、安装
内置模块无需安装
3、创建多线程
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import threading
import time
#为线程定义一个函数
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print ("%s:%s" % (threadName, time.ctime(time.time())))
# 创建两个线程
try:
a=threading.Thread(target=print_time, args=("Thread-1", 2,))
b=threading.Thread(target=print_time, args=("Thread-2", 4,))
threads=[]
threads.append(a)
a.setDaemon(True)
a.start()
b.start()
for t in threads:
t.join()
except:
print("Error:unable to start thread")
while 1:
pass
END