python 探索(四) Python CookBook 系统管理
看CookBook就像看小说,挑感兴趣的先学习。
所以继《文本》之后,开始《系统管理》。
同样,请善用目录。
发现一个cookbook:好地址
生成随机密码
from random import choice
import string def GenPasswd(length = 8,chars = string.letters+string.digits):
return ''.join([choice(chars) for i in range(length)]) for i in range(6):
print GenPasswd(12)
结果:
>>>
fnkdz5dPA3zu
TZF9HzndkrSb
fiGAfBU8y2rk
QRmtzTzNnxFR
RJp8Cv6CsEHV
9kPHiFUJ7uWz
>>>
拓展阅读:
Python中的random模块 - Capricorn.python - 博客园(random的常见操作,很清晰)
生成易记的伪随机密码
import random,string class password(object):
def __init__(self,filename):
self.data = open(filename).read().lower()
def renew(self,n = 8,maxmem = 3):
chars = []
for i in range(n):
rmdIndex = random.randrange(len(self.data))
self.data = self.data[rmdIndex:]+self.data[:rmdIndex]
where = -1
locate = chars[-maxmem:]
while where < 0 and locate:
where = self.data.find(str(locate))
locate = locate[1:]
ch = self.data[where+len(locate)+1]
if not ch.islower():
ch = random.choice(string.lowercase)
chars.append(ch)
return ''.join(chars) p = password("c:\\LICENSE.txt")
print p.renew(12)
思想:
(1)对于每一个随机字符,我们都按照以下流程处理一遍
(2)随机找到中间点,然后分成两段,翻转合并
(3)用最后的结果的倒数maxmem个字符来做locate标记
(4)每次找到这个locate处,若找不到,locate缩减为locate[1:],继续找,直到找到为止
(5)我们要的本次的随机字符就是找到的locate处的后一个字符self.data[where+len(locate)+1],如果locate为空,那么ch就是(2)后的第一个字符,也是随机的
拓展阅读:
以POP服务器的方式验证用户
import poplib def checkPOP3User(host,user,password):
try:
pop = poplib.POP3(host)
except:
raise RuntimeError("Could not establish connection"
"to %r for password check" % host)
try:
pop.user(user)
pop.pass_(password)
count,size = pop.stat()
assert type(count) == type(size) == int
print count,size
pop.quit()
except:
raise RuntimeError("Could not verify identity. \n"
"User name %r or password incorrect." % user)
pop.quit() checkPOP3User("pop.qq.com","411187674@qq.com","123456")
Ps:看了RuntimeError之后才发现,字符串可以s = "123""abc"这么写
思想:
(1)POP3.user(username)
Send user command, response should indicate that a password is required.
(2)POP3.pass_(password),请注意我不是pass,而是pass_
Send password, response includes message count and mailbox size. Note: the mailbox on the server is locked until quit() is called.
(3)POP3.stat()
Get mailbox status. The result is a tuple of 2 integers: (message count, mailbox size).
(4)记得用raise ,对了那个密码是我乱写的,别猜了,但是qq是对的
拓展阅读:
python中的异常处理-kouyanghao-ChinaUnix博客(异常的各种用法)
统计Apache中每个IP的点击率
import re def calcuteApacheIpHits(logfile_pathname):
ip_specs = r'\.'.join([r'\d{1,3}']*4)
re_ip = re.compile(ip_specs) ipHitListing = {}
contents = open(logfile_pathname,"r")
for line in contents:
match = re_ip.match(line)
if match :
ip = match.group()
#检查正确性
try:
quad = map(int,ip.split('.'))
except ValueError:
pass
else:
#如果ip存在就+1,不存在就设置为1
if len(quad) == 4 and min(quad) >= 0 and max(quad) <= 255:
ipHitListing[ip] = ipHitListing.get(ip,0) + 1
return ipHitListing print calcuteApacheIpHits("log.txt")
思想:
统计Apache的客户缓存的命中率
def clientCachePercentage(logfile_pathname):
contents = open(logfile_pathname,"r")
totalRequests = 0
cachedRequests = 0
for line in contents:
totalRequests += 1
if line.split(" ")[8] == "304":
cachedRequests += 1
return int(0.5+float(100 * cachedRequests)/totalRequests) print clientCachePercentage("1.txt")
思想:
在脚本中调用编辑器
普通的调用下编辑器来编辑内容。
Linux下使用本脚本。win下,找不到os.spawnlp这个方法。
import sys,os,tempfile def what_editor():
editor = os.getenv('VISUAL') or os.getenv('EDITOR')
if not editor:
if sys.platform == 'windows':
editor = 'Notepad.Exe'
else:
editor = 'vi'
return editor def edited_text(starting_text = ''):
temp_fd,temp_filename = tempfile.mkstemp(text = True)
os.write(temp_fd,starting_text)
os.close(temp_fd)
editor = what_editor()
x = os.spawnlp(os.P_WAIT,editor,editor,temp_filename)
if x:
raise RuntimeError, "Can't run %s %s (%s)" % (editor,temp_filename,x)
result = open(temp_filename).read()
os.unlink(temp_filename)
return result if __name__ == '__main__':
text = edited_text('''aaaaaaaa
bbbbbbb
cccccccc''')
print 'Edited text is:',text
备份文件
import sys,os,shutil,filecmp MAXVERSIONS = 100
def backup(tree_top,bakdir_name = 'bakdir'):
for root,subdirs,files in os.walk(tree_top):
#join链接出每个root下的子目录bakdir
backup_dir = os.path.join(root,bakdir_name)
#确保每个root下都有个子目录叫bakdir
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
#bakdir下的不递归处理
subdirs[:] = [d for d in subdirs if d != bakdir_name] for file in files:
filepath = os.path.join(root,file)
destpath = os.path.join(backup_dir,file)
#检查版本,共有MAXVERSIONS个版本
for index in xrange(MAXVERSIONS):
backup = "%s.%2.2d" % (destpath,index)
if not os.path.exists(backup):
break
if index > 0:
old_backup = "%s.%2.2d" % (destpath,index-1)
#abspath = os.path.abspath(filepath)#filepath本来就是绝对路径
try:
#如果备份和源文件一致,continue不处理
if os.path.isfile(old_backup) and filecmp.cmp(filepath,old_backup,shallow = False):
continue
except OSError:
pass
try:
shutil.copy(filepath,backup)
except OSError:
pass if __name__ == '__main__':
backup("c:\\test")
选择性地复制邮箱文件
通过邮箱创建一个邮件地址的白名单
阻塞重复邮件
检查你的Windows声音系统
import winsound try:
winsound.PlaySound("*",winsound.SND_ALIAS)
except RuntimeError,e:
print 'Sound system has problems,',e
else:
print 'Sound system is OK'
思想:
winsound,python你这个要逆天吗
在Windows中注册和反注册DLL
from ctypes import windll dll = windll[r'C:\\WINDOWS\\system32\\alrsvc.dll'] result = dll.DllRegisterServer()
result = dll.DllUnregisterServer()
from ctypes import oledll dll = oledll[r'C:\\WINDOWS\\system32\\alrsvc.dll'] result = dll.DllRegisterServer()
result = dll.DllUnregisterServer()
思想:
regsvr32.exe有关
Ps:暂时没用到。先记录下来。
检查并修改Windows自动运行任务
# -*- coding: cp936 -*- import _winreg as wr def how_many_tasks_at_logon():
areg = wr.ConnectRegistry(None,wr.HKEY_LOCAL_MACHINE)
akey = wr.OpenKey(areg,r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run')
try:
for i in xrange(1024):
try:
name,value,int_type = wr.EnumValue(akey,i)
print i,name,value,int_type
except EnvironmentError:
print "You have",i,"tasks strating at logon"
break
finally:
wr.CloseKey(akey) def wirte_to_registry(root_key,arg,value_name,value):
areg = wr.ConnectRegistry(None,root_key)
akey = wr.OpenKey(areg,arg,0,wr.KEY_WRITE)
try:
try:
wr.SetValueEx(akey,value_name,0,wr.REG_SZ,value)
except EnvironmentError:
print "Encountered problems writing into the Registry"
raise
finally:
wr.CloseKey(akey)
def delete_from_registry(root_key,arg,value_name):
areg = wr.ConnectRegistry(None,root_key)
akey = wr.OpenKey(areg,arg,0,wr.KEY_WRITE)
try:
try:
wr.DeleteValue(akey,value_name)
except EnvironmentError:
print "Encountered problems deleting key from Registry"
raise
finally:
wr.CloseKey(akey) root_key = wr.HKEY_LOCAL_MACHINE
arg = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
value_name = "myOwnKey"
value = r"C:\Program Files\多玩英雄联盟盒子\LOLBox.exe" print "=================reading=============== "
how_many_tasks_at_logon()
print "=================writing=============== "
wirte_to_registry(root_key,arg,value_name,value) print "=================reading=============== "
how_many_tasks_at_logon() print "=================deleting============== "
delete_from_registry(root_key,arg,value_name) print "=================reading=============== "
how_many_tasks_at_logon()
结果:
Ps:一开始编程把EnumValue写成EnumKey,一直报错,囧。还有把DeleteValue写成DeleteKey,囧。
EnvironmentError,其实我感觉
WindowsError挺好的
在Windows中创建共享
import win32net
import win32netcon
import os print('>>>正在运行共享文件夹设置程序...') shinfo = {}
folder = "c:\\test"
shinfo['netname'] = os.path.basename(folder)
shinfo['type'] = win32netcon.STYPE_DISKTREE
shinfo['remark'] = 'data files'
shinfo['premissions'] = 0
shinfo['max_uses'] = -1
shinfo['current_uses'] = 0
shinfo['path'] = 'c:\\test'
shinfo['passwd'] = ''
server = r'\\.'
win32net.NetShareAdd(server,2,shinfo)
结果:
思想:
链接一个正在运行的Internet Explorer实例
from win32com.client import Dispatch
from win32gui import GetClassName ShellWindowsCLSID = '{9BA05972-F6A8-11CF-A442-00A0C90A8F39}'
ShellWindows = Dispatch(ShellWindowsCLSID) for shellwindow in ShellWindows:
#筛选,Windows Explorer和Internet Explorer 是一样的,一个本地,一个网络
#这里要IE
if GetClassName(shellwindow.HWND) == 'IEFrame':
print shellwindow,shellwindow.LocationName,shellwindow.LocationURL
结果:
win32com.client和
win32gui,用python操作IE,很酷的说
读取Microsoft Outlook Contacts
在Mac OS X 中收集详细的系统信息
python 探索(四) Python CookBook 系统管理的更多相关文章
- Python学习(四) Python数据类型:序列(重要)
插播一下,先了解一下Python的数据类型,Python现有的数据类型有好多,最重要的有列表.元组.字典 列表:我觉得可以对应java中的数组 list=['physics', 'chemistry' ...
- 利用Python,四步掌握机器学习
为了理解和应用机器学习技术,你需要学习 Python 或者 R.这两者都是与 C.Java.PHP 相类似的编程语言.但是,因为 Python 与 R 都比较年轻,而且更加“远离”CPU,所以它们显得 ...
- 简学Python第四章__装饰器、迭代器、列表生成式
Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群 群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...
- Python 基础 四 面向对象杂谈
Python 基础 四 面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...
- 初学Python(四)——set
初学Python(四)——set 初学Python,主要整理一些学习到的知识点,这次是set. # -*- coding:utf-8 -*- #先来看数组和set的差别 d=[1,1,2,3,4,5] ...
- python 函数“四剑客”的使用和介绍
python函数四剑客:lambda.map.filter和reduce. 一.lambda(匿名函数) 1. 学习lambda要注意一下几点: lambda语句被用来创建新的函数对象,并且在运行的时 ...
- Python第四天 流程控制 if else条件判断 for循环 while循环
Python第四天 流程控制 if else条件判断 for循环 while循环 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 ...
- 二十四. Python基础(24)--封装
二十四. Python基础(24)--封装 ● 知识结构 ● 类属性和__slots__属性 class Student(object): grade = 3 # 也可以写在__slots ...
- 用python探索和分析网络数据
Edited by Markdown Refered from: John Ladd, Jessica Otis, Christopher N. Warren, and Scott Weingart, ...
- python第四十九天--paramiko模块安装大作战
准备开始学习:paramiko模块,发现这个模块十分难搞 安装不上 搞了半天,win10 64下 pytyon 3.6 的 paramiko模块 死活安不上,在网上不断的找资料,可是没有用,没有用啊 ...
随机推荐
- Extjs 更新数据集Ext.PagingToolbar的start参数重置的处理
问题:当翻页后,比如当前是第二页,start参数此时是5(初始为0),当切换左侧分类时,我们期望的是从所选分类下明细记录的第一条开始显示,结果发现不是这样,依然是从新数据的第二页开始显示,就是说ext ...
- C++的构造函数和析构函数
1.构造函数和析构函数为什么没有返回值? 构造函数和析构函数是两个非常特殊的函数:它们没有返回值.这与返回值为void的函数显然不同,后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构 ...
- java JNI 调试出现的错误
java JNI 调试出现的错误 ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2JDW ...
- BZOJ 2442: [Usaco2011 Open]修剪草坪
Description 在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪.现在,新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠.然而,FJ的草坪非常脏乱,因此,FJ只能够让他的 ...
- [转载]MongoDB C# 驱动教程
本教程基于C#驱动 v1.6.x . Api 文档见此处: http://api.mongodb.org/csharp/current/. 简介 本教程介绍由10gen支持的,用于MongoDB的C# ...
- XSS脚本攻击漫谈
XSS跨站脚本攻击一直都被认为是客户端 Web安全中最主流的攻击方式.因为 Web环境的复杂性以及 XSS跨站脚本攻击的多变性,使得该类型攻击很难彻底解决.那么,XSS跨站脚本攻击具体攻击行为是什 ...
- Unicode编码的熟悉与研究过程(内附全部汉字编码列表)
我有一个问题是:是不是会有个别汉字无法在Unicode下表示,这种情况下就不能完全显示了? 各种编码查询表:http://bm.kdd.cc/ ---------------------------- ...
- 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 日期:2005年6月1日 作者:seasky212 总结一下SQL语句中引号(').quoted ...
- Visual Studio中的项目属性-->生成-->配置
1.Debug配置 2.Release配置 2.Debug和Release的区别 (1)Debug有定义DEBUG常量,Release没有 (2)Debug没有优化代码,Release有 (3)生成路 ...
- JSP个人总结
应用JSP技术开发动态网站 JSP基本语法 默认JSP: <%@ page language="java" contentType="text/html; char ...