池偏一 | 博客 DEDICATED OPERATION AND MAINTENANCE DEVELOPMENT.
登录
X
X
  • Pillow 图像库
  • 安装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),如下图所示)

    image.png


    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()

    image.pngimage.png


    五、图像翻转


    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()

    image.pngimage.png


  • posted @ 2019-01-29 by 池偏一 阅读(91) 评论(0)
  • Argparse 命令行解析模块常用参数
  • 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)

    image.png


    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

    image.png


    综合实例:

    #!/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)

    image.png

  • posted @ 2019-01-29 by 池偏一 阅读(99) 评论(0)
  • linux系统密码动态生成脚本(1分钟一次)
  • #!/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()


  • posted @ 2019-01-29 by 池偏一 阅读(74) 评论(0)
  • 跳板机简单实现
  • 一、编辑系统环境变量,让用户登录后自动调用脚本

    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

    =====================================================================



  • posted @ 2019-01-29 by 池偏一 阅读(165) 评论(0)
© 2017 池偏一 | 赣ICP备 17014207号