安装pillow库
sudo pip install pillow
一、替换图片文件后缀名(文件必须是正常的图片文件)
from PIL import Image import os file = 'C:\\Users\\Administrator\\Pictures\\images\\qungxin\\test.png' f, e = os.path.splitext(file) #将文件名和encoding 分离 newfile = f + '.jpg' #设置修改后缀后的文件名称 with Image.open(file) as im: im.save(newfile)
二、设置缩略图(缩略图方法必须传入一个元组)
from PIL import Image import os f, e = os.path.splitext(file) outfile = f + '.thumbnail' + e with Image.open(file) as im: im.thumbnail((20,20)) #该方法必须传入tuple im.save(outfile)
三、识别目录中所有图像文
from PIL import Image import os,time home_path = 'C:\\Users\\Administrator\\Pictures\\images\\qungxin' for dirpath, dirnames, filenames in os.walk(home_path): for file in filenames: files = os.path.join(dirpath, file) try: with Image.open(files) as im: print files, im.format, im.mode except IOError: continue
四、裁剪图片
(裁剪图片需要预先对原图片进行切分。以坐标轴第四象限 左、上、右、下 四个点对原图进行定位,该例中原图大小为1334*750, 定义裁剪区(200,300,600,900),如下图所示)
from PIL import Image import os src_img = 'C:\\Users\\Administrator\\Pictures\\images\H5\\erwei.jpg' box = (200,300,600,900) with Image.open(src_img) as im: outfile = im.crop(box) outfile.save('C:\\Users\\Administrator\\Pictures\\images\\H5\\test.jpg') outfile.show()
五、图像翻转
transpose(Image.FLIP_LEFT_RIGHT) #图像上下镜像
transpose(Image.FLIP_TOP_BOTTOM) #图像上下镜像
transpose(Image.ROTATE_90) #图像翻转90度
transpose(Image.ROTATE_180) #翻转180度
transpose(Image.ROTATE_270) #翻转270度
例如:
from PIL import Image src = 'C:\Users\Administrator\Pictures\images\H5\erwei.jpg' with Image.open(src) as im: outfile = im.transpose(Image.FLIP_LEFT_RIGHT) outfile.show()
Argparse模块可以轻松编写用户友好的命令行界面。该程序定义了它需要的参数,argparse 并将找出如何解析这些参数sys.argv。该argparse 模块还会自动生成帮助和用法消息,并在用户给出程序无效参数时发出错误,该模块可以替代sys.argv用法。
argparse.ArgumentParser 对象参数如下: prog: 一般默认不改,使用脚本名称作为该参数值 usage:该参数是提示脚本用法,定义好后出现在脚本执行 python script.py --help 的下一行 description: 该参数输入说明信息到--help界面的 可选参数上方 epilog: 该参数输入说明信息到--help界面的 可选参数 下方 version: 自定义版本号
add_argument() 方法参数如下: name or flags : 一个字符串选项 help: 提示出现的帮助信息 type:设置参数的数据类型 default: 设置参数的默认值
#!/usr/bin/env python #--* coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import argparse parser = argparse.ArgumentParser(usage="python piltest.py {'-h'|'--help'|'-v'|'--classes'|'--name'}", description="使用下列参数输出学生信息", epilog="分类输出学生信息", version="test: 1.0") parser.add_argument('-c', '--classes', help='班级名称', default=1, type=int) parser.add_argument('-n', '--name', help='学生名字', default='jwh',type=str) args = parser.parse_args() student_class = args.classes student_name = args.name print "该学生姓名为 %s, 在%s 班" %(student_name, student_class)
parse_known_args:方法获取Namespace 和参数列表
#!/usr/bin/env python # --* coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import argparse parser = argparse.ArgumentParser(usage="python piltest.py {'-h'|'--help'|'-v'|'--classes'|'--name'}", description="选项如下:", epilog="帮助信息到此为止", version="test: 1.0") parser.add_argument('-m', '--mode', help='选择人员{老师或学生}', default='student', type=str) args, remaining = parser.parse_known_args() print args,remaining
综合实例:
#!/usr/bin/env python # --* coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import argparse parser = argparse.ArgumentParser(usage="python piltest.py {'-h'|'--help'|'-v'|'--classes'|'--name'}", description="选项如下:", epilog="帮助信息到此为止", version="test: 1.0") parser.add_argument('-m', '--mode', help='选择人员{老师或学生}', default='student', type=str) args, remaining = parser.parse_known_args() if args.mode.lower() == 'teacher': parser.add_argument('-s', '--subject', help='所教科目', default='english', type=str) parser.add_argument('-n','--name', help='老师名字',default='derrick',type=str) args = parser.parse_args() teacher_subject = args.subject teacher_name = args.name print "{} 老师,所教的科学类目是:{}".format(teacher_name, teacher_subject) elif args.mode.lower() == 'student': parser.add_argument('-c', '--classes', help='班级名称', default=1, type=int) parser.add_argument('-n', '--name', help='学生名字', default='jwh', type=str) args = parser.parse_args() student_class = args.classes student_name = args.name print "该学生姓名为{}, 在{} 班".format(student_name, student_class)
#!/usr/bin/env python #-*- coding: utf-8 -*- #__author__: 池偏一 # sys import os from datetime import datetime from string import maketrans, lowercase from hashlib import md5 # thirdparty #self program BASIC_PASSWD = '' USER_PATH = '/etc/passwd' SKIP_USERS = ['root'] #忽略影响账号 ''' gen a password ''' def _get_current_min_time(): return datetime.now().strftime("%Y-%m-%d %H:%M") def _get_offset(): now = datetime.now().strftime("%m%d") return sum([int(i) for i in now]) def _gen_offset_map(): offset = _get_offset() return maketrans(lowercase, lowercase[offset:] + lowercase[:offset]) def _get_offset_name(name): return name.lower().translate(_gen_offset_map()) def _get_orig_txt(name): return _get_current_min_time() + _get_offset_name(name) def gen_password(name): return md5(_get_orig_txt(name)).hexdigest()[-6:] ''' change password ''' def get_users(): try: fn = open(USER_PATH).readlines() users = [user.split(':')[0].strip() for user in fn if len(user.split(':')) >= 7 and user.split(':')[-1].strip().endswith('sh')] except Exception as e: fn = open('/tmp/error_log', 'a') fn.write(str(e)) fn.close() users = [] return users def _change_passwd(user, passwd): if not user or not passwd: return cmd = 'echo "%s:%s" | chpasswd 2>/dev/null' % (user, passwd) res = os.popen(cmd).read() if len(res) != 0: fn = open('/tmp/error_log', 'a') fn.write("time:%s\nchange password error:\norig cmd: %s\n\n" % (datetime.now().strftime('%Y-%m-%d %H:%M:%S'), cmd)) fn.close() def change_password(): # fn = open('/tmp/passwd.log', 'a') for user in get_users(): if user in SKIP_USERS: continue passwd = gen_password(user) # fn.write("%s %s: %s\n" % (datetime.now().strftime('%Y-%m-%d %H:%M:%S'), user, passwd)) passwd = BASIC_PASSWD + passwd _change_passwd(user, passwd) # print 'echo "%s:%s" | chpasswd' % (user, passwd) # fn.close() if __name__ == '__main__': change_password()
一、编辑系统环境变量,让用户登录后自动调用脚本
vim /etc/profile python /baolei/ssh_login.py # 判断登录用户是否为 root 用户,root用户退出程序不进行logout操作,否则则logout if [ $? != 10 ];then echo "Good Bye!" logout fi
二、定时获取最新数据API && 堡垒机程序
1)、获取最新数据脚本
#!/usr/bin/env python #-*- coding: UTF-8 -*- #Author : Derrick.jiang #Date : 2015-3-3 PM import os os.system('rm -rf /baolei/conf/nodes && wget https://xxx/nodes && mv ./nodes /baolei/conf/') fp = open("/baolei/conf/nodes", "r") all = fp.read() fp.close() fp = open("/baolei/conf/nodes", "w") fp.write(all.replace(r'\n', '\n').replace(r'"', ""))
2)、跳板机程序
#!/usr/bin/env/python #-*- coding: UTF-8 -*- #coding = gbk #author : derrick.jiang #Email : derrick.jiang@maichuang.net import urllib2 import time import json import re import sys,os import commands USER_PATH = '/etc/passwd' ACURRENT = commands.getoutput('whoami') s = open('/baolei/conf/nodes') q = s.read() files = q.split('\n\n') r = re.compile(r'^\[') s = open('/baolei/conf/nodes') lines = s.readlines() lines = [l for l in lines if r.match(l)] def check_ip(ipaddr): 'Check that the IP is correct' q = ipaddr.split('.') return len(q) == 4 and len(filter(lambda x: x >= 0 and x <= 255,map(int, filter(lambda x: x.isdigit(), q)))) == 4 select = [] def select_area(): '选择登陆省市' global select while True: os.system('clear') print '___'*15 for index, province in enumerate(lines): print "%s. %s" % (index, province.strip()) print '' print '~~~'*15 print "IP: Enter The Ip Adress:" print "q : QUIT" print '___'*15 area = raw_input("Please Select Area: ") if area.isdigit() == True and int(area) < len(files): os.system('clear') break elif check_ip(area) == True: os.system('clear') os.system('/baolei/tilt/bin/ssh -o StrictHostKeyChecking=no -p port root@%s' %area) elif area == 'q': os.system('clear') sys.exit(0) else: pass area = int(area) select = files[area].split('\n') for i in select: print i print '~~~'*15 print "IP: Enter The Ip Adress:" print "q : QUIT" print "b : BACK" print '___'*15 def select_server(): '选择登陆的服务器IP' global select while True: i = raw_input("Please Select Server: ") if i.isdigit() == True and int(i) >= 1 and int(i) < len(select): break elif check_ip(i) == True: os.system('clear') os.system('/baolei/tilt/bin/ssh -o StrictHostKeyChecking=no -p port root@%s' %i) elif i == 'q': os.system('clear') sys.exit(0) elif i == 'b': select_area() else: pass i = int(i) IP = select[i].split()[-1] os.system('/baolei/tilt/bin/ssh -o StrictHostKeyChecking=no -p port root@%s' %IP) def users_name(): try: fn = open(USER_PATH).readlines() users = [user.split(':')[0].strip() for user in fn if len(user.split(':')) == 7 and user.split(':')[-1].strip().endswith('sh')][1:] #过滤出非root用户 except Exception as e: fn = open('/tmp/error_log', 'a') fn.write(str(e)) fn.close() users = [] return users ''' CHOOSE USER LOGIN ''' if ACURRENT in users_name(): while True: select_area() select_server() else: exit(10) #非遍历内容内的用户都返回10 环境变量忽略执行
三、安装tilt交互式日志工具: 详见:http://www.keepbase.com/try-tilt/comment-page-1
四、更改日志保存格式:
import os import shutil import time import commands now_time = commands.getoutput('date -d "2 minute ago" +%Y-%m-%d') dir = "/var/log/ssh_log/%s/" %now_time if os.path.isdir(dir): # 判断是否存在路径 filelist = [] filelist=os.listdir(dir) for i in filelist: NewFile = i.replace("-baolei-tilt-bin-ssh -o StrictHostKeyChecking=no -p port ","-") shutil.move(dir+i,dir+NewFile) else: print ("Directory is not exit,please check dir...") time.sleep(1) exit()
五、将获取API脚本和更改日志名称脚本加入计划任务,定时执行:
0 4 * * * root python /baolei/wgetnewapi.py &> /dev/null * * * * * root python /baolei/change_logname.py &> /dev/nul
六、将所有程序和日志写入文件夹权限设置为允许所有用户访问。
七、在所有用户 ~/.ssh/目录下面放入可以远程至server端的私钥
=====================================================================
日志记录格式为:%D-%m-%d/username-date-user@IP 如:2015-04-22/Kevin-15:53:24-root@192.168.1.2
=====================================================================