复习(67)

  1 # 模块:
  2 # 模块是Python组织代码的基本方式。
  3 # 一个Python脚本可以单独运行,也可以导入到另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module)。
  4 # 所有的.py文件都可以作为一个模块导入
  5 # 模块名与脚本的文件名相同
  6 # 例如我们编写了一个名为hello.py的脚本,则可以在另一个脚本中用import hello语句来导入它。
  7 # 包:
  8 # Python的模块可以按目录组织为包
  9 # 创建一个包的步骤:
 10 # 创建一个名字为包名的目录
 11 # 在该目录下创建一个__init__.py文件
 12 # 根据需要,在该目录下存放脚本文件或已编译的扩展及子包
 13 # 面向对象介绍:
 14 # 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。
 15 # OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
 16 # 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。
 17 # 为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
 18 # 而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
 19 # 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
 20 # 类的属性:
 21 # 类的属性按使用范围分为公有属性和私有属性,类的属性范围取决于属性的名称。
 22 #  公有属性:在类中和类外都能调用的属性。
 23 #  私有属性:不能在类外及被类以外的函数调用。
 24 # 定义方式:以”__”双下划线开始的成员变量就是私有属性
 25 # 可以通过instance._classname__attribute方式访问。
 26 #  内置属性:由系统在定义类的时候默认添加的,由前后双下划线构成,__dict__, __module__。
 27 # 类的方法:
 28 # 方法的定义和函数一样,但是需要self作为第一个参数。
 29 # 类方法为:
 30 #  公有方法
 31 #  私有方法
 32 #  类方法
 33 #  静态方法
 34 # 公有方法:在类中和类外都能调用的方法。
 35 # 私有方法:不能被类的外部调用,在方法前面加上”__”双下划线就是私有方法。
 36 # self参数
 37 # 用于区分函数和类的方法(必须有一个self),self参数表示执行对象本身。
 38 # 类方法:被classmethod()
 39 # 函数处理过的函数,能被类所调用,也能被对象所调用(是继承的关系)
 40 # 静态方法:相当于”全局函数”,可以被类直接调用,可以被所有实例化对象共享,通过staticmethod()
 41 # 定义,静态方法没有”self”参数。
 42 # 装饰器:
 43 # - @ classmethod
 44 # - @ staticmethod
 45 # 类的内置方法:
 46 # 方法1:直接使用外部类调用内部类
 47 # object_name = outclass_name.inclass_name()
 48 # 方法2:先对外部类进行实例化,然后再实例化内部类
 49 # out_name = outclass_name()
 50 # in_name = out_name.inclass_name()
 51 # in_name.method()
 52 # 类的继承:
 53 # 即一个派生类(derived class )继承基类(base class )的字段和方法。
 54 # 继承也允许把一个派生类的对象作为一个基类对象对待。
 55 # 例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
 56 
 57 # rc:
 58 import sys
 59 import os
 60 from subprocess import Popen, PIPE
 61 
 62 class Process(object):
 63 '''memcached rc script'''
 64 def __init__(self, name, program, args, workdir):
 65 self.name = name
 66 self.program = program
 67 self.args = args
 68 self.workdir = workdir
 69 
 70 def _init(self):
 71 '''/var/tmp/memcached'''
 72 if not os.path.exists(self.workdir):
 73 os.mkdir(self.workdir)
 74 os.chdir(self.workdir)
 75 
 76 def _pidFile(self):
 77 '''/var/tmp/memcached/memcached.pid'''
 78 return os.path.join(self.workdir, "%s.pid" % self.name)
 79 
 80 def _writhPid(self):
 81 if self.pid:
 82 with open(self._pidFile(), 'w') as fd:
 83 fd.write(str(self.pid))
 84 
 85 def start(self):
 86 pid = self._getPid()
 87 if pid:
 88 print "%s is running..." % self.name
 89 sys.exit()
 90 self._init()
 91 cmd = self.program + ' ' + self.args
 92 p = Popen(cmd, stdout=PIPE, shell=True)
 93 self.pid = p.pid
 94 self._writhPid()
 95 print "%s start Sucessful" % self.name
 96 
 97 def _getPid(self):
 98 p = Popen(['pidof', self.name], stdout=PIPE)
 99 pid = p.stdout.read().strip()
100 return pid
101 
102 def stop(self):
103 pid = self._getPid()
104 if pid:
105 os.kill(int(pid), 15)
106 if os.path.exists(self._pidFile()):
107 os.remove(self._pidFile())
108 print "%s is stopped" % self.name
109 
110 def restart(self):
111 self.stop()
112 self.start()
113 
114 def status(self):
115 pid = self._getPid()
116 if pid:
117 print "%s is already running" % self.name
118 else:
119 print "%s is not running" % self.name
120 
121 def help(self):
122 print "Usage: %s {start|stop|status|restart}" % __file__
123 
124 def main():
125 name = 'memcached'
126 prog = '/usr/bin/memcached'
127 args = '-u nobody -p 11211 -c 1024 -m 64'
128 wd = '/var/tmp/memcached'
129 pm = Process(name = name,
130 program = prog,
131 args = args,
132 workdir = wd)
133 try:
134 cmd = sys.argv[1]
135 except IndexError, e:
136 print "Option error"
137 sys.exit()
138 if cmd == 'start':
139 pm.start()
140 elif cmd == 'stop':
141 pm.stop()
142 elif cmd == 'restart':
143 pm.restart()
144 elif cmd == 'status':
145 pm.status()
146 else:
147 pm.help()
148 
149 if __name__ == '__main__':
150 main()

 

posted @ 2017-12-06 09:49  依哈  阅读(87)  评论(0编辑  收藏  举报