Python 官方文档:入门教程 => 点击学习
python写的系统常用命令,linux和windows通用,用的时候直接from util import *导入即可使用,很方便 #!/usr/bin/Python # -*- coding: utf-8 -*- # 通用功能类封装
python写的系统常用命令,linux和windows通用,用的时候直接from util import *导入即可使用,很方便
- #!/usr/bin/Python
- # -*- coding: utf-8 -*-
- # 通用功能类封装
- import os,time,sys,string,urllib,Httplib,shutil,platfORM,tarfile
- from commands import getstatusoutput as getso
- from ConfigParser import *
-
- def hostname(host_name):
- '''''
- linux适用
-
- hostname封装,修改主机名。
- '''
- str_cmd = "/bin/sed -i 's/HOSTNAME/#&/;$a HOSTNAME=%s' /etc/sysconfig/network;/bin/hostname %s" % (host_name,host_name)
- status, result = getso(str_cmd)
- wr_log(str_cmd, status, result)
-
- def md5sum(file_name):
- '''''
- md5sum封装,获取文件的md5值
- '''
- if os.path.isfile(file_name):
- f = open(file_name,'rb')
- py_ver = sys.version[:3]
- if py_ver == "2.4":
- import md5 as hashlib
- else:
- import hashlib
- md5 = hashlib.md5(f.read()).hexdigest()
- f.close()
- return md5
- else:
- return 0
-
- def md5(file_name):
- '''''
- linux适用
-
- md5sum -c 封装,校验md5文件,返回校验成功或失败状态
- '''
- str_cmd="/usr/bin/md5sum -c %s" % file_name
- status,result=getso(str_cmd)
- return status
-
- def grep(s_str, file_name):
- '''''
- grep封装,查找文件中关键字,有则返回所在行,否则返回空字符串。
- '''
- try:
- fd = open(file_name)
- content = fd.read()
- result = ""
- if content.find(s_str) != -1:
- for line in content.split("\n"):
- if line.find(s_str) != -1:
- result = result + line + "\n"
- return result.strip()
- except Exception, e:
- wr_log("grep %s %s" % (s_str, file_nsme), 1, e)
-
- def rwconf(type, file_name, section, option, s_str=""):
- '''''
- 读取标准的ini格式配置文件,type可为以下值:
- get 获取section下的option的值,值为字符串;
- getint 获取section下的option的值,值为数字;
- modi 修改section下的option的值,并保存;
- del 删除section下的option,并保存。
-
- 注:option严格区分大小写
- '''
- try:
- if type == "get" or type == "getint":
- cf = ConfigParser()
- else:
- cf = ConfParser()
- cf.read(file_name)
- if type == "get":
- return cf.get(section, option)
- elif type == "getint":
- return cf.getint(section, option)
- elif type == "modi":
- try:
- cf.set(section, option, s_str)
- cf.write(open(file_name, "w"))
- wr_log("modify %s for %s" % (option, file_name))
- except Exception, e:
- wr_log("modify %s for %s" % (option, file_name), 1, str(e))
- elif type == "del":
- try:
- cf.remove_option(section, option)
- cf.write(open(file_name, "w"))
- wr_log("del %s for %s" % (option, file_name))
- except Exception, e:
- wr_log("del %s for %s" % (option, file_name), 1, str(e))
- except Exception, e:
- wr_log("read %s for %s" % (option, file_name), 1, str(e))
-
- def chkconfig(type, svr_name, switch=""):
- '''''
- linux适用
-
- chkconfig封装,根据传入的type参数执行相应操作,type可以为以下几种:
- add 添加服务至启动项;
- del 从启动项删除服务;
- 数字 指定运行级别的服务开启或关闭。
-
- type及svr_name为必需的参数。
-
- 例子:
- 开启运行级别3的sshd服务:chkconfig("3", "sshd", "on")
- '''
- if type != "add" and type != "del":
- type = "--level %s" % str(type)
- str_cmd = "/sbin/chkconfig %s %s %s" % (type, svr_name, switch)
- status, result = getso(str_cmd)
- wr_log(str_cmd, status, result)
-
- def passwd(user_name,newpass):
- '''''
- passwd封装,修改用户密码
- '''
- os_type = platform.system()
- if os_type == "Linux":
- str_cmd = "echo '%s' | passwd %s --stdin" % (newpass, user_name)
- status, result = getso(str_cmd)
- wr_log(str_cmd, status, result)
- elif os_type == "Windows":
- try:
- if os.system('net user %s "%s" ' %(user_name,newpass)) == 0:
- wr_log("modify passwd for %s " % user_name)
- elif os.system('net user %s "%s" ' %(user_name,newpass)) == 2:
- raise Exception, "user %s isnot exists" % user_name
- except Exception,e:
- wr_log("modify passwd for %s " % user_name, 1, e)
-
- def echo(str, file_name):
- '''''
- linux适用
-
- echo封装,添加字符串到文件尾部
- '''
- str_cmd = "/bin/echo '%s' >> %s" % (str, file_name)
- status, result = getso(str_cmd)
- wr_log(str_cmd, status, result)
-
- def upload(localfiles, remotepath, host="xxx", username="xxx", passWord="xxxx"):
- '''''
- 上传文件至ftp服务器,默认上传至208FTP,如要上传至其它FTP服务器,请指定host/user/pass
-
- 例:
- upload("a.txt,b.txt", "/test/")
- 上传a.txt、b.txt文件到208的test目录下
- '''
- import base64
- from ftplib import FTP
- try:
- localfiles = localfiles.split(",")
- f =FTP(host)
- f.login(username,password)
- f.cwd(remotepath)
- for localfile in localfiles:
- fd = open(localfile,'rb')
- f.storbinary('STOR %s' % os.path.basename(localfile),fd)
- fd.close()
- f.quit()
- wr_log("upload %s" % localfiles)
- except Exception, e:
- wr_log("upload %s" % localfiles, 1, e)
-
- class ConfParser(RawConfigParser):
- '''''
- ConfigParser模块有一个缺陷,改写ini文件的某个section的某个option,写入ini文件后
- ini文件的注释都丢掉了,并且option的大写字母都转换成了小写
- 为了保存ini文件的注释以及option的大小写,重写了write、set、optionxform等方法,由rwconf函数调用
- '''
- def write(self, fp):
- """Write an .ini-format representation of the configuration state.
-
- write ini by line no
- """
-
- if self._defaults:
- section = DEFAULTSECT
- lineno = self._location[section]
- self._data[lineno] = "[%s]\n" %section
- for (key, value) in self._defaults.items():
- if key != "__name__":
- wholename = section + '_' + key #KVS
- lineno = self._location[wholename]
- self._data[lineno] = "%s = %s\n" %(key, str(value).replace('\n', '\n\t'))
-
- for section in self._sections:
- lineno = self._location[section]
- self._data[lineno] = "[%s]\n" % section
- for (key, value) in self._sections[section].items():
- if key != "__name__":
- wholename = section + '_' + key #KVS
- lineno = self._location[wholename]
- self._data[lineno] = "%s = %s\n" %(key, str(value).replace('\n', '\n\t'))
-
- for line in self._data:
- fp.write("%s"%line)
- fp.close()
-
- def _read(self, fp, fpname):
- """Parse a sectioned setup file.
-
- When parsing ini file, store the line no in self._location
- and store all lines in self._data
- """
- self._location = {}
- self._data = []
- cursect = None # None, or a dictionary
- optname = None
- lineno = 0
- e = None # None, or an exception
- while True:
- line = fp.readline()
- self._data.append(line) #KVS
- if not line:
- break
- lineno = lineno + 1
- if line.strip() == '' or line[0] in '#;':
- continue
- if line.split(None, 1)[0].lower() == 'rem' and line[0] in "rR":
- # no leading whitespace
- continue
- if line[0].isspace() and cursect is not None and optname:
- value = line.strip()
- if value:
- cursect[optname] = "%s\n%s" % (cursect[optname], value)
- else:
- mo = self.SECTCRE.match(line)
- if mo:
- sectname = mo.group('header')
- if sectname in self._sections:
- cursect = self._sections[sectname]
- elif sectname == DEFAULTSECT:
- cursect = self._defaults
- self._location[DEFAULTSECT] = lineno -1 #KVS
-
- else:
- cursect = {'__name__': sectname}
- self._location[sectname] = lineno -1 #KVS
- self._sections[sectname] = cursect
-
- optname = None
- elif cursect is None:
- raise MissingSectionHeaderError(fpname, lineno, line)
- else:
- mo = self.OPTCRE.match(line)
- if mo:
- optname, vi, optval = mo.group('option', 'vi', 'value')
- if vi in ('=', ':') and ';' in optval:
- pos = optval.find(';')
- if pos != -1 and optval[pos-1].isspace():
- optval = optval[:pos]
- optval = optval.strip()
- if optval == '""':
- optval = ''
- optname = self.optionxform(optname.rstrip())
- cursect[optname] = optval
-
- if cursect == self._defaults:
- wholename = DEFAULTSECT + '_' + optname #KVS
- else:
- wholename = cursect['__name__'] + '_' + optname #KVS
- self._location[wholename] = lineno-1 #KVS
- else:
- if not e:
- e = ParsingError(fpname)
- e.append(lineno, repr(line))
- if e:
- raise e
-
- def add_section(self, section):
- """Create a new section in the configuration.
-
- Raise DuplicateSectionError if a section by the specified name
- already exists.
- """
- if section in self._sections:
- raise DuplicateSectionError(section)
- self._sections[section] = {}
-
- linecount = len(self._data)
- self._data.append('\n')
- self._data.append('%s'%section)
- self._location[section] = linecount + 1
-
- def set(self, section, option, value):
- """Set an option."""
- if not section or section == DEFAULTSECT:
- sectdict = self._defaults
- else:
- try:
- sectdict = self._sections[section]
- except KeyError:
- raise NoSectionError(section)
- option = self.optionxform(option)
- add = False
- if not option in sectdict:
- add = True
- sectdict[self.optionxform(option)] = value
- if add:
- lineno = self._location[section]
- self._data.append('')
- idx = len(self._data)
- while idx>lineno:
- self._data[idx-1] = self._data[idx-2]
- idx = idx-1
- self._data[idx+1] = '%s = %s\n'%(option,value)
- self._location[section+'_'+option]=idx+1
- for key in self._location:
- if self._location[key] > lineno:
- self._location[key] = self._location[key] + 1
- self._data[idx+1] = '%s = %s\n'%(option,value)
- self._location[section+'_'+option]=idx+1
-
- def remove_option(self, section, option):
- """Remove an option. """
- if not section or section == DEFAULTSECT:
- sectdict = self._defaults
- else:
- try:
- sectdict = self._sections[section]
- except KeyError:
- raise NoSectionError(section)
- option = self.optionxform(option)
- existed = option in sectdict
- if existed:
- del sectdict[option]
- wholename = section + '_' + option
- lineno = self._location[wholename]
-
- del self._location[wholename]
- for key in self._location:
- if self._location[key] > lineno:
- self._location[key] = self._location[key] -1
- del self._data[lineno]
- return existed
-
- def remove_section(self, section):
- """Remove a file section."""
- existed = section in self._sections
- if existed:
- lstOpts = []
- for option in self._sections[section]:
- if option == '__name__':
- continue
- lstOpts.append(option)
- for option in lstOpts:
- self.remove_option(section,option)
-
- del self._sections[section]
- wholename = section
- lineno = self._location[wholename]
-
- del self._location[wholename]
- for key in self._location:
- if self._location[key] > lineno:
- self._location[key] = self._location[key] -1
- del self._data[lineno]
- return existed
-
- def optionxform(self, optionstr):
- ''''' 防止大小写转换'''
- return optionstr
--结束END--
本文标题: python写的系统常用命令(二)
本文链接: https://lsjlt.com/news/189380.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0