#!/usr/bin/env python |
|
#-*- coding:utf-8 -*- |
|
import os,sys,time,shutil,re |
|
from _ast import Num |
|
from django.db.models.sql.datastructures import Join |
|
|
|
''' |
|
--------------------------- |
|
此脚本用于之前学习内容的回顾 |
|
装饰器还需要多看,目前还是不是很清楚 |
|
类的继承 |
|
property需要学习 |
|
抽象方法/私有字段/私有方法/静态字段/静态方法 |
|
__call__方法 |
|
__del__方法 |
|
--------------------------- |
|
''' |
|
#-------------------递归例子--------------------- |
|
''' |
|
#函数 |
|
def fun2(n): |
|
result = n |
|
for i in range(1,n): |
|
result *= i |
|
return result |
|
|
|
print 'fun2',fun2(5) |
|
|
|
|
|
#递归 |
|
def fun3(n): |
|
if n == 1: |
|
return 1 |
|
else: |
|
return n*fun3(n-1) |
|
|
|
print 'fun3',fun3(5) |
|
|
|
|
|
def fun(n): |
|
if n == 1: |
|
return 1 |
|
else: |
|
return n+fun(n-1) |
|
|
|
print fun(5) |
|
|
|
|
|
def fun1(x): |
|
if x == 0 or x ==1: |
|
return 1 |
|
else: |
|
return fun1(x-1) + fun1(x-2) |
|
|
|
print fun1(5) |
|
|
|
|
|
如果说兔子在出生两个月后,就有繁殖能力,在拥有繁殖能力之后,这对兔子每个月能生出 |
|
一对小兔子来。假设所有兔子都不会死去,能够一直干下去,那么一年之后可以繁殖多少对 |
|
兔子呢? |
|
|
|
|
|
def tuzi(x): |
|
if x==1 or x==2: |
|
return 1 |
|
else: |
|
return tuzi(x-1)+tuzi(x-2) |
|
|
|
print tuzi(5) |
|
|
|
|
|
|
|
''' |
|
#-------------------递归 遍历目录下所有文件--------------------- |
|
|
|
''' |
|
#----------列表推导式列出所有文件 |
|
path = 'd:/python' |
|
os.chdir(path) |
|
a = [i for i in os.listdir(path) if os.path.isfile(i)] |
|
for x in a: |
|
print x |
|
|
|
#等同下面 |
|
for i in os.listdir('d:/python'): |
|
a = os.path.join('d:/python',i) |
|
print os.path.isfile(a) |
|
if os.path.isfile(i): |
|
print i |
|
|
|
path = 'd:/python' |
|
os.chdir(path) |
|
a = [i for i in os.listdir(path) if os.path.isfile(i) and os.path.splitext(i)[1] =='.zip'] |
|
print a |
|
|
|
|
|
path = 'd:/python' |
|
|
|
|
|
#----------递归方式 |
|
#可采用os.path.join拼接路径的方式,来确认完整路径,避免使用路径切换,os.chdir |
|
def scan(path): |
|
for file in os.listdir(path): |
|
file_dir = os.path.join(path,file) |
|
if not os.path.isdir(file_dir): |
|
print file_dir |
|
else: |
|
scan(file_dir) |
|
scan(path) |
|
|
|
#----------os.walk方式 |
|
g = os.walk('d:/python') |
|
for path,folder,filelist in g: |
|
print filelist |
|
for filename in filelist: |
|
print os.path.join(path,filename) |
|
''' |
|
|
|
#------------------文件夹整理----------------------- |
|
|
|
|
|
|
|
|
|
''' |
|
def file_summary(path): |
|
for file in os.listdir(path): |
|
file_dir = os.path.join(path,file) |
|
if os.path.isdir(file_dir): |
|
file_summary(file_dir) |
|
else: |
|
file_name = ''.join(re.findall('201d{5}',file)) |
|
Folder_name = os.path.join(path,file_name) |
|
try: |
|
if not os.path.exists(Folder_name): |
|
os.mkdir(Folder_name) |
|
wjy_num += 1 |
|
try: |
|
if file_dir not in os.listdir(Folder_name): |
|
print file_dir |
|
shutil.move(file_dir,Folder_name) |
|
except: |
|
print 'error' |
|
file_num += 1 |
|
except: |
|
print '没找到日期' |
|
|
|
file_summary(path) |
|
''' |
|
|
|
|
|
# print ''' |
|
# ------------------------------------------------------- |
|
# 此脚本用于整理文件,按图片名日期进行分类,每个日期建 |
|
# 一个新的文件夹,将同一天的文件放入文件夹中 |
|
# ------------------------------------------------------- |
|
# ''' |
|
|
|
''' |
|
def fodler_time_fengnei(path): |
|
wjy_num = 0 |
|
file_num = 0 |
|
os.chdir(path) |
|
for i in os.listdir(path): |
|
#print i |
|
Folder_file = ''.join(re.findall('201d{5}',i)) |
|
#print Folder_file |
|
try: |
|
#lock.acquire() |
|
if not os.path.exists(Folder_file): |
|
os.mkdir(Folder_file) |
|
wjy_num += 1 |
|
try: |
|
if i not in os.listdir(Folder_file): |
|
shutil.move(i,Folder_file) |
|
|
|
except: |
|
print 'error' |
|
#lock.release() |
|
file_num += 1 |
|
except: |
|
print '没找到日期' |
|
print '处理了%d个文件'%file_num |
|
print '创建了%d个文件夹'%wjy_num |
|
print '分类完成' |
|
#print os.getcwd() |
|
def folder_vedio(path): |
|
os.chdir(path) |
|
#os.walk 得到一个三元数组:路径,路径下的文件夹,文件 |
|
for i,k,v in os.walk(path): |
|
print i,k,v |
|
#迭代文件夹目录 |
|
for folder in k: |
|
#进入每个文件夹 |
|
os.chdir(folder) |
|
#迭代当前文件夹下的文件 |
|
for img in os.listdir(os.curdir): |
|
print img |
|
try: |
|
ext = img.split('.')[1] #得到扩展名 |
|
print ext |
|
except: |
|
print 'error' |
|
if ext != 'jpg': #如果不是图片文件 |
|
shutil.move(img, os.pardir) #移动到上一级目录 |
|
|
|
os.chdir(os.pardir) |
|
|
|
#此函数用于将文件夹下的所有文件移动到指定的目录中, |
|
#目前只有一层目录功能 2016/12/27更新 |
|
def file_move(path,dst): |
|
os.chdir(path) #这里一定要先进入到需要整理的目录中 |
|
for i,k,v in os.walk(path): |
|
print i,k |
|
for folder in k: |
|
try: |
|
print os.getcwd() |
|
os.chdir(folder) |
|
for file in os.listdir(os.curdir): |
|
shutil.move(file, dst) |
|
except Exception,e: |
|
print e |
|
os.chdir(os.pardir) |
|
|
|
#以下用于移动文件,已成功实现所需功能 2016/12/28 |
|
def file_move(path,dst): |
|
os.chdir(path) |
|
n = 1 |
|
#dst = 'd:\pooto\p' |
|
#这里用os.walk产生一个生成器,再通过迭代,列出目录下所有的子目录和文件 |
|
#os.walk以递归的方式遍历当前目录下的所有文件和目录 |
|
for path1,file_dir,fs in os.walk(path): |
|
# print 'PATH 第%d次:'%n,path1 |
|
# print 'DIR:第%d次:'%n,file_dir |
|
# print 'FS第%d次:'%n,fs |
|
#确认当前目录下是否有文件,没有跳过 |
|
if fs==[]: |
|
pass |
|
#print '空的' |
|
else: |
|
file_num = 0 |
|
try: |
|
#如果有文件,迭代一下 |
|
for file in fs: |
|
#进入目录 |
|
os.chdir(path1) |
|
#print '当前路径是: '+os.getcwd()+', 当前文件是: '+file |
|
ext = file.split('.')[-1] #取最后一个就是扩展名 |
|
#print ext |
|
if ext == 'jpg' or ext =='png': |
|
try: |
|
shutil.move(file,dst) #移动到指定目录 |
|
#print 'move was ok' |
|
file_num += 1 #统计移动文件的个数 |
|
except Exception,e: #出错了,提示原因 |
|
#print e |
|
print u'移动文件出错了,快查一下原因' |
|
#shutil.move(file,del_dir) |
|
except: |
|
print u'迭代序列出错了' |
|
print u'移动了%d个文件'% file_num |
|
os.chdir(os.pardir) #当前目录完成了,跳回主目录,进行下一次迭代目录 |
|
n += 1 |
|
|
|
if __name__ == '__main__': |
|
|
|
print |
|
------------------------------------------------- |
|
请选择你需要的功能: |
|
1. 对图片按名称分组 |
|
2. 对图片按后缀分组 |
|
3. 将文件移动到另一目录中 |
|
------------------------------------------------- |
|
|
|
|
|
select1 = raw_input(':') |
|
start_time = time.time() |
|
if select1 == '1': |
|
#lock = threading.Lock() |
|
path = raw_input(u'如:g:/software/DIM :').strip() |
|
fodler_time_fengnei(path) |
|
# t1 = threading.Thread(target=fodler_time_fengnei,args=(path,)) |
|
# t2 = threading.Thread(target=fodler_time_fengnei,args=(path,)) |
|
# t3 = threading.Thread(target=fodler_time_fengnei,args=(path,)) |
|
elif select1 =='2': |
|
pass |
|
elif select1 == '3': |
|
print u'源文件夹:' |
|
path = raw_input(u'如:g:/software/DIM :').strip() |
|
dst = raw_input(u'目标文件夹:').strip() |
|
file_move(path, dst) |
|
# 多线程没什么效果 |
|
# t1 = Thread(target=file_move,args=(path,dst)) |
|
# t2 = Thread(target=file_move,args=(path,dst)) |
|
# t3 = Thread(target=file_move,args=(path,dst)) |
|
# p1.start() |
|
# print 't1' |
|
# t2.start() |
|
# print 't2' |
|
# t3.start() |
|
# print 't3' |
|
end_time = time.time() |
|
print u'总共花了%.2f秒'%(end_time-start_time) |
|
|
|
# path = raw_input('[eg:g:/software/DIM] :').strip() |
|
# #os.chdir(path) |
|
# file_num = 0 |
|
# wjy_num = 0 |
|
# # folder_vedio(path) |
|
# fodler_time_fengnei(path) |
|
# print '总共整理了%d个文件'%file_num |
|
# print '总共创建了%d个文件夹'%wjy_num |
|
|
|
|
|
|
|
''' |
|
|
|
#------------------局部变量----------------------- |
|
''' |
|
var = 1 |
|
def a(): |
|
global var |
|
var += 1 |
|
var1 = 2 |
|
# print var |
|
def b(): |
|
print var1 |
|
nolocal #这里2.7好像有问题,3.x好像是好的 |
|
var1 = 5 |
|
#print var1 |
|
b() |
|
|
|
a() |
|
''' |
|
|
|
|
|
#------------------------Pexpect练习---------------------- |
|
|
|
''' |
|
用于登录Cisco设备并获取相关信息,每次一个命令,完成后自动退出 |
|
适用于Linux |
|
''' |
|
''' |
|
def get(pe,cmd): |
|
login = 'telnet %s' % pe |
|
username = 'pingtest' |
|
password = 'pwdtest' |
|
tn = pexpect.spawn(login,timeout = 300) |
|
index = tn.expect(["Username",pexpect.EOF, pexpect.TIMEOUT]) |
|
if index == 0: |
|
tn.expect('Username:') |
|
tn.sendline(username) |
|
tn.expect('Password:') |
|
tn.sendline(password) |
|
tn.expect('#') |
|
tn.sendline(cmd) |
|
tn.sendline(' ') |
|
tn.expect('#') |
|
result = tn.before |
|
tn.sendline('exit') |
|
print result |
|
elif index == 1: |
|
print 'pexpect.EOF' |
|
else: |
|
print 'pexpect.TIMEOUT' |
|
|
|
|
|
if __name__ == '__main__': |
|
tupe1 = { |
|
'Mon':'星期一', |
|
'Tue':'星期二', |
|
'Wen':'星期三', |
|
'Thu':'星期四', |
|
'Fri':'星期五', |
|
'Sat':'星期六', |
|
'Sun':'星期天' |
|
} |
|
wenday = time.strftime('%a') |
|
xiqi = tupe1[wenday] |
|
while True: |
|
print '
' |
|
pe = (raw_input('请输入你需要登录的PE[退出请用q]:')).strip() |
|
print '
' |
|
if pe == 'q': |
|
break |
|
else: |
|
cmd = (raw_input('请输入你需要执行的命令[退出请用q]:')).strip() |
|
if cmd == 'q': |
|
break |
|
print '
' |
|
print '当前查询时间:%s'%((time.strftime('%Y/%m/%d %H:%M:%S'))+' '+ xiqi) |
|
print '-----------------------------------------------------' |
|
print '
' |
|
get(pe,cmd) |
|
|
|
''' |
|
|
|
|
|
#------------------------装饰器实验1---------------------- |
|
# def out(fun): |
|
# def watter(): |
|
# print '之前出现' |
|
# fun() |
|
# print '之后出现' |
|
# return watter |
|
# |
|
# @out |
|
# def fun1(): |
|
# print '这是Fun1的内容' |
|
# |
|
# fun1() |
|
# ---------带参数的装饰器 |
|
# def out(fun): |
|
# def watter(args): |
|
# print '之前出现' |
|
# fun(args) |
|
# print '之后出现' |
|
# return watter |
|
# |
|
# @out |
|
# def fun1(args): |
|
# print '这是Fun1的内容',args |
|
# |
|
# fun1(100) |
|
|
|
#---------带返回的装饰器 |
|
# def out(fun): |
|
# def watter(args): |
|
# print '之前出现' |
|
# a =fun(args) |
|
# print '之后出现' |
|
# print a |
|
# return watter |
|
# |
|
# @out |
|
# def fun1(args): |
|
# return u'这是Fun1的内容',args |
|
# |
|
# fun1(100) |
|
|
|
#-----下面这个例子很好说明的装饰器的运行 |
|
# def timeslong(func): |
|
# def call(): |
|
# start = time.clock() |
|
# print("It's time starting ! ") |
|
# func() |
|
# print("It's time ending ! ") |
|
# end = time.clock() |
|
# return "It's used : %s ." % (end - start) |
|
# return call |
|
# |
|
# @timeslong |
|
# def f(): |
|
# y = 0 |
|
# for i in range(10): |
|
# y = y + i + 1 |
|
# print(y) |
|
# return y |
|
# |
|
# print(f()) |
|
|
|
|
|
#------------------------property--------------------- |
|
|
|
# class A: |
|
# def __init__(self): |
|
# print '这是A的Self' |
|
# |
|
# def B(self): |
|
# print '这是B的方法' |
|
# |
|
# @property |
|
# def C(self): |
|
# # print '这是C的方法' |
|
# return '这是C的方法' |
|
# |
|
# a = A() |
|
# print a |
|
# print a.B() |
|
# print a.C |
|
# |
|
# |
|
# class C: |
|
# def __init__(self): |
|
# self._x = None |
|
# |
|
# @property |
|
# def x(self): |
|
# """I'm the 'x' property.""" |
|
# return self._x |
|
# |
|
# @x.setter |
|
# def x(self, value): |
|
# self._x = value |
|
# |
|
# @x.deleter |
|
# def x(self): |
|
# del self._x |
|
# |
|
# |
|
# c1 = C() |
|
# c1.x = 3 |
|
# print c1.x |
|
|
|
######################################################### |
|
|
|
|
|
#------------------------抽象方法--------------------- |
|
#抽象类抽象方法==接口 |
|
from abc import ABCMeta,abstractmethod |
|
|
|
# class Bar: |
|
# __metaclass__ = ABCMeta |
|
# |
|
# @abstractmethod |
|
# def get(self): |
|
# raise 'no define get ' |
|
# |
|
# class Car(Bar): |
|
# def __init__(self): |
|
# print '这是一个Car的类' |
|
# |
|
# # def get(self): |
|
# # print 'aaa' |
|
# |
|
# car = Car() |
|
|
|
|
|
# class Bar: |
|
# __metaclass__ = ABCMeta |
|
# |
|
# @abstractmethod |
|
# def Fun(self): |
|
# pass |
|
# |
|
# class Foo(Bar): |
|
# def __init__(self): |
|
# print '__init__' |
|
# |
|
# # def Fun(self): |
|
# # print '告警' |
|
# |
|
# f = Foo() |
|
# f.Fun() |
|
|
|
######################################################### |
|
|
|
#------------------------私有字段/方法--------------------- |
|
|
|
# class Bar: |
|
# def __init__(self): |
|
# self.__x = 10 |
|
# |
|
# def __get(self): |
|
# print '这是私有方法' |
|
# #可以通过动态方法调用私有方法 |
|
# def show(self): |
|
# print self.__get() |
|
# |
|
# b = Bar() |
|
# print b._Bar__x #强制使用类的方式来访问私有方法 |
|
# print b.show() |
|
|
|
#------------------------静态字段/方法--------------------- |
|
|
|
# class Bar: |
|
# name = 'liyang' |
|
|
|
# @staricmethod |
|
# def hello(): |
|
# print 'Hello' |
|
# |
|
# b = Bar() |
|
# print b.name |
|
# print b.hello() |
|
# 静态字段和静态方法无需实例化,可通过用类来调用 |
|
######################################################### |
|
|
|
|
|
#------------------------静态字段/方法--------------------- |
|
#__call__ 最后执行 |
|
#__del__ 什么时候使用,直接用对象加括号就可以调用了 |
|
|
|
# class Bar: |
|
# def __init__(self): |
|
# print '这是__init__' |
|
# |
|
# def __call__(self): |
|
# print '这是__call__' |
|
# |
|
# def __del__(self): |
|
# print '我就要被删除了' |
|
# |
|
# def show(self): |
|
# print '这是一个显示的函数' |
|
# |
|
# b = Bar() |
|
# print b |
|
# print b() #调用call方法 |
|
# print b.show() |
|
|
|
######################################################### |
|
|
|
|
|
#------------------------类的继承--------------------- |
|
#新式类必须加object,同时多重继承是广度优先,经典类是深度优先 |
|
# class A(object): |
|
# def __init__(self): |
|
# print '这是A的__init__' |
|
# |
|
# def show(self): |
|
# print '这是显示A的类' |
|
# |
|
# class B(A): |
|
# def __init__(self): |
|
# #A.__init__(self) |
|
# super(B,self).__init__() #这里的super值为当前类,主类必须是新式类 |
|
# print '这是B的__init__' |
|
# |
|
# class C(A): |
|
# def __init__(self): |
|
# print '这是C的__init__' |
|
# |
|
# def show(self): |
|
# print '这是显示C的类' |
|
# |
|
# class D(B,C): |
|
# def __init__(self): |
|
# print '这是D的__init__' |
|
# |
|
# |
|
# # b1 = B() |
|
# # print b1 |
|
# |
|
# d1 = D() |
|
# print d1 |
|
# print d1.show() |
|
|
|
#--------------------使用super也可以在经黄类中避免深度优先的问题------------------ |
|
# class A(): |
|
# def __init__(self): |
|
# print '这是A的__init__' |
|
# |
|
# def show(self): |
|
# print '这是显示A的类' |
|
# |
|
# class B(A): |
|
# def __init__(self): |
|
# #A.__init__(self) |
|
# super().__init__() #这里的super,可以避免深度优先的问题 |
|
# print '这是B的__init__' |
|
# |
|
# class C(A): |
|
# def __init__(self): |
|
# print '这是C的__init__' |
|
# |
|
# def show(self): |
|
# print '这是显示C的类' |
|
# |
|
# class D(B,C): |
|
# def __init__(self): |
|
# print '这是D的__init__' |
|
|
|
# |
|
# b1 = B() |
|
# print b1 |
|
|
|
# d1 = D() |
|
# print d1 |
|
# print d1.show() |
|
|
|
######################################################### |
|
|
|
|
|
|
|
''' |
|
------------------------------ |
|
字符编码:ASCII/Unicode/UTF-8 |
|
|
|
decode的作用是将其他编码的字符串转换成unicode编码, |
|
encode的作用是将unicode编码转换成其他编码的字符串, |
|
Unicode<----decode----UTF |
|
Unicode-----encode---->UTF |
|
|
|
|
|
------------------------------ |
|
''' |
|
|
|
#------------------------编码学习--------------------- |
|
# name = '李明' |
|
# print '第一次',name |
|
# if not isinstance(name,unicode): |
|
# name = name.decode('utf-8') |
|
# print name |
|
# |
|
|
|
######################################################### |
|
|
|
# import datetime |
|
# #显示当前日期 |
|
# print datetime.date.today() |
|
# print datetime.date.today() - datetime.timedelta(days = 2) |
|
# #显示指定日期 |
|
# print datetime.date(2015, 4, 2) |
|
# |
|
# print datetime.time(1,2,3) |
|
|
|
#------------------------生成器--------------------- |
|
|
|
# def a(): |
|
# for i in range(10): |
|
# yield i |
|
# |
|
# a1 = a() |
|
# print a1.next() |
|
# print a1.next() |
|
######################################################### |
|
|
|
|
|
|
|
#--------------------Excel Into Mysql-------------------- |
|
# import pymysql |
|
# import xlrd |
|
# |
|
# def xls_info(): |
|
# xls = xlrd.open_workbook('d:/bb.xls') #打开Excel |
|
# sheets = xls.sheet_names() #获取表 |
|
# table = xls.sheet_by_name(sheets[2]) #得到需要的表名 |
|
# rows = table.nrows #获取表的总行数 |
|
# return table,rows #返回表名和行数 |
|
# |
|
# def mysql_info(): |
|
# myconn = pymysql.Connect('127.0.0.1','root','','django') #连接Mysql |
|
# mycur = myconn.cursor() #创建游标 |
|
# mycur.execute('set names utf8') #指定为utf8编码 |
|
# #创建表格 |
|
# # table_create = 'CREATE TABLE mysql_test(name varchar(20),ip varchar(20));' |
|
# # mycur.execute(table_create) |
|
# mycur.execute('desc mysql_test') |
|
# #插入表格的命令 |
|
# insert_sql = 'insert into mysql_test values(%s,%s);' |
|
# |
|
# #调用上个函数的值,得到表名和行数 |
|
# table,rows=xls_info()[0],xls_info()[1] |
|
# for i in range(0,rows): #迭代每行 |
|
# xls_line = table.row_values(i) #得到每行的信息 |
|
# print xls_line |
|
# print mycur.execute(insert_sql,xls_line) #插入每行的数据到数据库中 |
|
# mycur.execute('select * from mysql_test') |
|
# print mycur.fetchall() |
|
# myconn.commit() #事务提交 |
|
# mycur.close() |
|
# myconn.close() |
|
# |
|
# mysql_info() |
|
|
|
|
|
#-------------Mysql得到字典------------------------ |
|
|
|
#!/usr/bin/env python |
|
# encoding: utf-8 |
|
|
|
#Created on 2017年1月13日 |
|
#@author: Administrator |
|
''' |
|
import pymysql |
|
|
|
def main(): |
|
try: |
|
conn = pymysql.connect(host = '127.0.0.1', user = 'root', passwd = '', db = 'django') |
|
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) |
|
cur.execute("select * from mysql_test") |
|
qur_result = cur.fetchall() |
|
cur.close() |
|
conn.close() |
|
# for record in qur_result: |
|
# user = record[0] |
|
# passwd = record[1] |
|
except pymysql.Error,e: |
|
print 'Mysql Error Msg:',e |
|
#print type(qur_result) |
|
for k in qur_result: |
|
#print k |
|
for i,j in k.items(): |
|
print j |
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
main() |
|
|
|
''' |
|
|
|
#-------------------线程练习------------------------ |
|
import threading |
|
from IPython.utils.io import stdin, stderr |
|
from sys import stdout |
|
import paramiko |
|
|
|
|
|
''' |
|
|
|
def Foo(args): |
|
for i in range(10): |
|
print i |
|
time.sleep(1) |
|
|
|
print '开始' |
|
t1 = Thread(target=Foo,args = (1,)) |
|
#t1.setDaemon(True) |
|
t1.start() |
|
print t1.getName() |
|
|
|
''' |
|
|
|
#-------------------自定义线程练习------------------------ |
|
''' |
|
|
|
class MyThread(Thread): |
|
def run(self): |
|
Thread.run(self) |
|
print 'run' |
|
for i in range(10): |
|
print i |
|
time.sleep(1) |
|
|
|
|
|
def Foo(args): |
|
print '这是我的新函数' |
|
|
|
t1 = MyThread(target=Foo,args =(1,)) |
|
t1.start() |
|
print t1.getName() |
|
print t1.isDaemon() |
|
print t1.join(3) |
|
''' |
|
#-------------------生产消费模型------------------------ |
|
''' |
|
#两个类都是一样的,要用到队列,有两个判断条件,是否为空,是否为满 |
|
import Queue |
|
class ShenChang(Thread): |
|
def __init__(self,name,que): |
|
self.__Name = name |
|
self.__Que = que |
|
Thread.__init__(self) |
|
|
|
def run(self): |
|
while True: |
|
if self.__Que.full(): |
|
print '做完了,可以休息一下了' |
|
time.sleep(1) |
|
else: |
|
self.__Que.put('xxx') |
|
print self.__Name,'生产包子' |
|
Thread.run(self) |
|
|
|
que = Queue.Queue(maxsize=30) |
|
|
|
for x in range(10): |
|
name = 'alan%d'%x |
|
s1 = ShenChang(name,que) |
|
s1.start() |
|
|
|
class XiaFei(Thread): |
|
def __init__(self,name,que): |
|
self.__Name = name |
|
self.__Que = que |
|
Thread.__init__(self) |
|
|
|
def run(self): |
|
while True: |
|
if self.__Que.empty(): |
|
print '没有吃的了,先休息一下吧' |
|
time.sleep(2) |
|
else: |
|
self.__Que.get() |
|
print self.__Name,'吃了一个包子' |
|
Thread.run(self) |
|
|
|
for i in range(3): |
|
name = 'name%d'%i |
|
t1 = XiaFei(name,que) |
|
t1.start() |
|
|
|
''' |
|
|
|
#-------------------paramiko用户名和密码------------------------ |
|
''' |
|
import paramiko |
|
|
|
ssh = paramiko.SSHClient() |
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) |
|
ssh.connect('114.28.37.23', 50022, 'root', '263!@#$%^&*()') |
|
print 'connected..............' |
|
while True: |
|
cmd = raw_input('请输入你要执行的命令[退出q] : ') |
|
if cmd == 'q': |
|
print '
bye---------
------------' |
|
sys.exit() |
|
stdin,stdout,stderr = ssh.exec_command(cmd) |
|
print stdout.read() |
|
ssh.close() |
|
|
|
''' |
|
|
|
#-------------------paramiko Key----------------------- |
|
|
|
''' |
|
#在执行前要手工在目标机器上输入以下命令: |
|
# ssh-keygen -t rsa 创建密钥 |
|
# ssh-copy-id root@114.28.37.209 将公钥Copy到服务器 |
|
|
|
|
|
private_key_path = '/root/.ssh/id_rsa' |
|
key = paramiko.RSAKey.from_private_key_file(private_key_path) |
|
|
|
paramiko.util.log_to_file('paramiko.log') #加入日志 |
|
ssh = paramiko.SSHClient() |
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) |
|
ssh.connect('127.0.0.1', 22, username='root', pkey=key) |
|
stdin,stdout,stderr = ssh.exec_command('ls') |
|
print stdout.read() |
|
ssh.close() |
|
|
|
''' |
|
#-------------------paramiko 创建删除显示 ssh router----------------------- |
|
''' |
|
ssh = paramiko.SSHClient() |
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) |
|
|
|
#IP,Port,Username,Password='114.141.185.5',22, 'opsinfo', 'pwdops' |
|
IP,Port,Username,Password='114.141.185.5',22, 'opsinfo', 'pwdops' |
|
try: |
|
ssh.connect(IP,Port,Username,Password, look_for_keys=False, allow_agent=False) |
|
except Exception,e: |
|
print e |
|
print 'ssh connection established to %s' % IP |
|
|
|
|
|
remote_conn = ssh.invoke_shell() |
|
#print remote_conn.recv(1000) |
|
remote_conn.send('
') |
|
remote_conn.send('sh ip int bri
') |
|
time.sleep(2) |
|
print remote_conn.recv(10000) |
|
#stdin,stdout,stderr = ssh.exec_command('sh ver') |
|
# ssh.connect('1172.16.4.1', 23, 'opsinfo', 'pwdops') |
|
# stdin,stdout,stderr = ssh.exec_command('sh ver') |
|
#print stdout.read() |
|
ssh.close() |
|
''' |
|
#-------------socket登录路由器测试----------------- |
|
''' |
|
import socket |
|
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) |
|
ip_port =('172.16.4.1',23) |
|
sock.connect(ip_port) |
|
sock.send('opsinfo
') |
|
time.sleep(1) |
|
sock.send('pwdops
') |
|
time.sleep(1) |
|
sock.send('sh ver') |
|
time.sleep(1) |
|
data1 = sock.recv(1024) |
|
time.sleep(1) |
|
print data1 |
|
|
|
''' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#-------------------paramiko上传下载----------------------- |
|
''' |
|
print os.getcwd() |
|
os.chdir('d:/') |
|
print os.getcwd() |
|
t = paramiko.Transport(('114.28.37.23', 50022)) |
|
t.connect(username='root', password='263!@#$%^&*()') |
|
sftp = paramiko.SFTPClient.from_transport(t) |
|
local_path = 'd:/lsdksmq-v2.0.0.200.zip' |
|
base_name = os.path.basename(local_path) |
|
remote_path = '/home/'+base_name |
|
sftp.put(local_path,remote_path) #上传 |
|
|
|
#sftp.get(remote_path,local_path) #下载 |
|
|
|
t.close() |
|
''' |
|
''' |
|
t = paramiko.Transport(('114.28.13.143', 22)) |
|
t.connect(username='root', password='111111') |
|
sftp = paramiko.SFTPClient.from_transport(t) |
|
|
|
print sftp.listdir('/smb') |
|
print sftp.rename('/smb/Flow.rrd.bak','/smb/Flow.rrd.bak1') |
|
print sftp.mkdir('/home/aa1',0755) |
|
print sftp.listdir('/home') |
|
''' |
|
#-------------------paramiko+threading----------------------- |
|
|
|
''' |
|
用函数将Paramiko的代码包起来,再通过我线程来同时操作 |
|
|
|
def SshCmd(server,username,password,cmd): |
|
ssh = paramiko.SSHClient() |
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) |
|
ssh.connect(server,50022,username, password) |
|
stdin,stdout,stderr = ssh.exec_command(cmd) |
|
print server, '
%s'% cmd, |
|
print stdout.read() |
|
ssh.close() |
|
|
|
|
|
if __name__ =='__main__': |
|
username = 'root' |
|
password = '263!@#$%^&*()' |
|
cmds = ['ls -lh /'] |
|
ips = ['114.28.37.23','114.28.37.24'] |
|
for ip in ips: |
|
for cmd in cmds: |
|
temp = Thread(target=SshCmd,args=(ip,username,password,cmd)) |
|
temp.start() |
|
|
|
''' |
|
|
|
|
|
|
|
|
|
#-------------------threading 异步模型----------------------- |
|
''' |
|
import threading |
|
|
|
def shengchang(): |
|
print u'P:做包子………………' |
|
event.wait() |
|
event.clear() |
|
print u'P:做包子' |
|
time.sleep(3) |
|
print u'P:你的包子做好了' |
|
event.set() |
|
|
|
|
|
def xiaofei(): |
|
print u'C:买包子去………………' |
|
event.set() |
|
time.sleep(2) |
|
print u'C:等做包子……………… ' |
|
#print event.wait() |
|
while True: |
|
if event.isSet(): |
|
print u'C:太好了' |
|
break |
|
else: |
|
print '做其他事情去了……' |
|
time.sleep(0.08) |
|
|
|
event = threading.Event() |
|
p = threading.Thread(target=shengchang) |
|
c = threading.Thread(target=xiaofei) |
|
p.start() |
|
c.start() |
|
|
|
''' |
|
|
|
#-------------------IP换算---------------------- |
|
''' |
|
def ch1(num): |
|
s = [] |
|
for i in range(4): |
|
s.append(str(num%256)) |
|
print s |
|
num /= 256 |
|
return '.'.join(s[::-1]) |
|
print ch1(123456789) |
|
|
|
|
|
#用lambda的方式,整数toIP 地址 一行代码搞定 |
|
ch2 = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)]) |
|
print ch2(123456789) |
|
|
|
#用lambda的方式,IP地址转换到整数 |
|
ch3 = lambda x:sum([256**j*int(i) for j,i in enumerate(x.split('.')[::-1])]) |
|
print ch3('7.91.205.21') |
|
|
|
''' |
|
|
|
#-------------------IP敬意计算---------------------- |
|
import os |
|
''' |
|
def getip(ip, count): |
|
count = int(count) |
|
ip2 = int(ip.split('.')[-2]) |
|
ip1 = int(ip.split('.')[-1]) |
|
ip_before = '%s.%s' % (ip.split('.')[0], ip.split('.')[1]) |
|
|
|
for i in range(0,count,4): |
|
new_ip1 = ip1 + i |
|
if 11 <= new_ip1 <= 254: |
|
print '%s.%s.%s' % (ip_before, str(ip2), str(new_ip1)) |
|
else: |
|
new_ip2 = ip2 + int(new_ip1/254) |
|
new_ip1 = new_ip1%254 + 0 |
|
print '%s.%s.%s' % (ip_before, str(new_ip2), str(new_ip1)) |
|
|
|
if __name__ == '__main__': |
|
getip('10.0.1.0', 1000) |
|
''' |
|
''' |
|
def getip(ip, count,step): |
|
count = int(count) |
|
|
|
ip1 = int(ip.split('.')[-1]) |
|
ip2 = int(ip.split('.')[-2]) |
|
ip3 = int(ip.split('.')[-3]) |
|
ip4 = int(ip.split('.')[-4]) |
|
ip_before = '%s.%s' % (ip.split('.')[0], ip.split('.')[1]) |
|
|
|
for i in range(0,count,step): |
|
new_ip1 = ip1 + i |
|
#print '%s.%s.%s' % (ip_before, str(ip2), str(new_ip1)) |
|
if new_ip1 <= 255: |
|
pass |
|
print '%s.%s.%s' % (ip_before, str(ip2), str(new_ip1)) |
|
else : |
|
new_ip2 = ip2 + int(new_ip1/256) |
|
if new_ip2 <= 255: |
|
new_ip1 = new_ip1%256 |
|
print '%s.%s.%s' % (ip_before, str(new_ip2), str(new_ip1)) |
|
else: |
|
new_ip3 = ip3 + int(new_ip2/256) |
|
new_ip2 = ip1 + int(new_ip1/256) |
|
new_ip1 = new_ip1%256 |
|
#print 'ip1------------:',new_ip1 |
|
new_ip2 = 0 |
|
if new_ip1 >= (256/step-1)*step: |
|
new_ip2 += 1 |
|
new_ip1 = new_ip1%256 |
|
#print 'ip2-----:',new_ip2 |
|
print '%s.%s.%s.%s' % (str(ip4),str(new_ip3), str(new_ip2), str(new_ip1)) |
|
|
|
|
|
if __name__ == '__main__': |
|
getip('10.0.255.192',830,32) |
|
|
|
''' |
|
|
|
#---------------------pexpect 交互连接------------------------ |
|
''' |
|
#!/usr/bin/env python |
|
#coding=utf-8 |
|
|
|
import pexpect |
|
import time,re |
|
import pymysql |
|
|
|
loginprompt = '#' |
|
def get(login_ip): |
|
login = 'telnet %s' % login_ip |
|
tn = pexpect.spawn(login,timeout = 300) |
|
#tn.expect('Username:') |
|
flag = tn.expect(["login","Username:", "(?i)Unknown host", pexpect.EOF, pexpect.TIMEOUT]) |
|
username = 'opsinfo' |
|
password = 'pwdops' |
|
if flag == 0 or flag == 1: |
|
tn.sendline(username) |
|
tn.expect('Password:') |
|
tn.sendline(password) |
|
tn.expect(r'[#>]') |
|
print tn.before |
|
#交互开始 |
|
tn.interact() |
|
print 'Left interactv mode' |
|
else: |
|
print 'error' |
|
|
|
if __name__ == '__main__': |
|
login_ip = raw_input('IP: ') |
|
get(login_ip) |
|
''' |
|
|
|
|
|
|
|
#---------------------ping 主机------------------------ |
|
''' |
|
#!/usr/bin/env python |
|
import multiprocessing |
|
import subprocess |
|
import time |
|
|
|
start_time = time.time() |
|
host_list = ['192.168.100.254','1.1.1.1','192.168.100.253','114.28.127.2','114.28.127.72','114.28.127.70','114.28.127.12','114.28.127.56','114.28.127.102'] |
|
if len(host_list) > 30: |
|
process_number = 30 |
|
else: |
|
process_number = len(host_list) |
|
def ping_host(ipaddr): |
|
if subprocess.call('ping -c5 -W 1 %s > /dev/null' % ipaddr, shell=True) == 0: |
|
#if subprocess.call('ping -c1 -W 1 %s ' % ipaddr, shell=True) == 0: |
|
print '%s is OK' % ipaddr |
|
else: |
|
print '%s is DOWN' % ipaddr |
|
pool = multiprocessing.Pool(processes=10) |
|
for ip in host_list: |
|
pool.apply_async(ping_host,(ip,)) |
|
#pool.map(ping_host,host_list) |
|
pool.close() |
|
pool.join() |
|
|
|
end_time = time.time() |
|
print 'It is take %.2f seconds'%(start_time-end_time) |
|
''' |
|
|
|
#---------------------从文件中找出IP地址------------------------ |
|
''' |
|
import re |
|
f = file('d:ip.txt','rb') |
|
set1 = set() |
|
for line in f.xreadlines(): |
|
try: |
|
ip = ''.join(re.findall('(?:d+.){3}d{1,3}', line)) |
|
#print ip |
|
set1.add(ip) |
|
except: |
|
pass |
|
f.close() |
|
set1 = sorted(set1) |
|
#print set1 |
|
for i in set1: |
|
print i |
|
|
|
''' |
|
|
|
#---------------------用Pexpect登录设备并测试Ping----------------------- |
|
''' |
|
#!/usr/bin/env python |
|
#-*- coding:utf-8 -*- |
|
|
|
import pexpect |
|
import re |
|
import time |
|
|
|
问题: |
|
1.迭代查询和Ping包,第二次总是看不到查询的结果,导致搜索错误,在Python中直接测试正常 |
|
2.另一个问题:通过expect如果PIng不到,是否有返回结果,好像看不到 |
|
|
|
f = file('/smb/python_s8/day8/ip.txt','rb') |
|
|
|
username = 'pingtest' |
|
password = 'pwdtest' |
|
tn = pexpect.spawn('telnet 219-mr01') |
|
#index = tn.expect(["Username:",pexpect.EOF, pexpect.TIMEOUT]) |
|
try: |
|
#if index == 0: |
|
tn.expect('Username:') |
|
tn.sendline(username) |
|
tn.expect('Password:') |
|
tn.sendline(password) |
|
print 'auth is ok' |
|
x= 1 |
|
for line in f.xreadlines(): |
|
#print line |
|
tn.expect('#') |
|
#print 'is this running?' |
|
tn.sendline('sh ip vrf interface | inc %s' % line) |
|
tn.expect('#') |
|
result = tn.before |
|
tn.expect('#') |
|
# print len(result) |
|
print '-------------------this is %d result:---------------
%s
'%(x,result) |
|
ip = ''.join(re.findall('(?:d+.){3}d{1,3}', result)) |
|
vrf = ''.join(re.findall('(w{3,5}d{3,6}w+)',result)) |
|
print 'ip: %s , vrf: %s' %(ip,vrf) |
|
|
|
#这里更改目标IP地址 |
|
ip1= ip.split('.') #分割IP |
|
if ip1[0] == '114': |
|
ip1[3] =str(int(ip.split('.')[-1])+1) #替换最后一个IP数字 |
|
else: |
|
ip1[3] =str(int(ip.split('.')[-1])-1) #替换最后一个IP数字 |
|
targetIP ='.'.join(ip1) |
|
|
|
#组合命令 |
|
cmd = 'ping vrf %s %s re 2'%(vrf,targetIP) |
|
print cmd |
|
try: |
|
tn.sendline(cmd) |
|
except: |
|
print 'error' |
|
time.sleep(10) |
|
|
|
tn.expect('#') |
|
#tn.expect('#') |
|
result1 = tn.before |
|
print result1 |
|
#tn.sendline('
') |
|
x += 1 |
|
tn.sendline('exit') |
|
# elif index == 1: |
|
# print 'pexpect.EOF' |
|
# else: |
|
# print 'pexpect.TIMEOUT' |
|
except Exception,e: |
|
print e |
|
''' |
|
|
|
#---------------------Jump跳板机---------------------- |
|
|
|
#!/usr/bin/python |
|
# # coding:utf-8 |
|
# import sys |
|
# import time |
|
# import re |
|
# import pexpect |
|
# import os |
|
# import struct |
|
# import fcntl |
|
# import termios |
|
# import signal |
|
# import MySQLdb |
|
# |
|
|
|
# |
|
# def sigwinch_passthrough (sig, data): |
|
# winsize = getwinsize() |
|
# global child |
|
# child.setwinsize(winsize[0],winsize[1]) |
|
# |
|
# def getwinsize(): |
|
# if 'TIOCGWINSZ' in dir(termios): |
|
# TIOCGWINSZ = termios.TIOCGWINSZ |
|
# else: |
|
# TIOCGWINSZ = 1074295912L # Assume |
|
# s = struct.pack('HHHH', 0, 0, 0, 0) |
|
# x = fcntl.ioctl(sys.stdout.fileno(), TIOCGWINSZ, s) |
|
# return struct.unpack('HHHH', x)[0:2] |
|
# |
|
# def getServersList(): |
|
# sqlStr = ''' select * from sys_info ''' |
|
# cursor.execute(sqlStr) |
|
# rows = cursor.fetchall() |
|
# strList = '' |
|
# for index, row in enumerate(rows): |
|
# strList += 'Hostname:%s , IP: 33[1;34;40m%s 33[0m
' % (row[0],row[1]) |
|
# return strList |
|
# |
|
# def sshLogin(choice): |
|
# reip = re.compile(r'(?<![.d])(?:d{1,3}.){3}d{1,3}(?![.d])') |
|
# if len ( reip.findall(choice) ) == 0: |
|
# print ' 33[1;31;40mIP Error you entered.Please Enter again. 33[0m' |
|
# return |
|
# host = reip.findall(choice)[0] |
|
# sqlStr = ''' select count(*) from sys_info where ip='%s' ''' % host |
|
# cursor.execute(sqlStr) |
|
# rows = cursor.fetchall() |
|
# if rows[0][0] == 0: |
|
# print ' 33[1;31;40mThe IP you entered is not in the list. 33[0m' |
|
# return |
|
# sqlStr = ''' select * from sys_info where ip='%s' ''' % host |
|
# cursor.execute(sqlStr) |
|
# rows = cursor.fetchall() |
|
# username =rows[0][2] |
|
# passwd =rows[0][3] |
|
# print 'ssh ' + username + '@' + host + ' ...' |
|
# global child |
|
# child = pexpect.spawn('ssh %s@%s' % (username,host)) |
|
# #child = pxssh.pxssh() |
|
# child.logfile = fout |
|
# #child.logfile = sys.stdout |
|
# #child.logfile_send = sys.stdout |
|
# signal.signal(signal.SIGWINCH, sigwinch_passthrough) |
|
# |
|
# winsize = getwinsize(); |
|
# child.setwinsize(winsize[0], winsize[1]) |
|
# flag = child.expect(['continue', 'password', pexpect.EOF, pexpect.TIMEOUT]) |
|
# #child.login (host, username, passwd, original_prompt='[$#>]') |
|
# #child.prompt() |
|
# #print flag |
|
# if flag == 0: |
|
# child.sendline('yes') |
|
# child.expect('.*password:.*') |
|
# child.sendline(passwd) |
|
# elif flag == 1: |
|
# child.sendline(passwd) |
|
# child.interact() |
|
# pass |
|
# |
|
# if __name__ == '__main__': |
|
# DBHOST='127.0.0.1' |
|
# DBNAME='jump' |
|
# DBUSER = 'root' |
|
# DBPWD = 'db03dUNG' |
|
# FILENAME = '/data/build/command_jump.log' |
|
# WELCOME = ''' 33[1;34;40m### Welcome use JumpServer to Login. ### 33[0m ''' |
|
# CHOICE = """1. Type 33[1;34;40mIP ADDRESS 33[0m To Login. |
|
# 2. Type 33[1;34;40mP/p 33[0m To Print The Servers You Available. |
|
# 3. Type 33[1;34;40mQ/q 33[0m To Quit. |
|
# 33[1;34;40mOpt or IP>: 33[0m """ |
|
# try: |
|
# conn = MySQLdb.connect(host='%s' % DBHOST ,user='%s' % DBUSER , passwd='%s' % DBPWD , db='%s' % DBNAME , charset='utf8') |
|
# except Exception, e: |
|
# print e |
|
# sys.exit() |
|
# cursor = conn.cursor() |
|
# fout = open (FILENAME , "ab") |
|
# print WELCOME |
|
# while True: |
|
# choice = raw_input( CHOICE ) |
|
# if cmp(choice,"P") == 0 or cmp(choice,"p") == 0 : |
|
# print getServersList() |
|
# elif cmp(choice,"Q") == 0 or cmp(choice,"q") == 0: |
|
# print 'Exit.' |
|
# break |
|
# else: |
|
# sshLogin(choice) |
|
# |
|
# cursor.close() |
|
# conn.close() |
|
# fout.close() |
|
# |
|
# [root@jump1 build]# |
|