Python第18天 memcached启动脚本v1

2018-12-6 10:15:32

3.2 类的属性总结

  1. 类的公有属性
  2. 类的私有属性
  3. 对象的公有属性
  4. 对象的私有属性
  5. 内置属性
  6. 函数的局部变量
  7. 全局变量
#!/usr/bin/python
#coding:utf8
var6 = '全局变量'
class MyClass(object):
    var1 = '类的公有属性 var1'
    __var2 = '类的私有属性 __var2'

    def fun1(self):#类的方法属性
        self.var3 = '对象的公有属性 var3'
        self.__var4 = '对象的私有属性 __var4'
        var5 = '函数的局部变量 var5'
        global var5 #申明为全局变量之后才能被外部调用
    def fun2(self):
        print self.var1
        print self.__var2
        print self.var3
        print self.__var4
        #print var5 #局部变量无法其他函数方法被调用global之后才能被调用
        print var5
        print var6
mc = MyClass()
mc.fun1()
print '*' * 50
mc.fun2()
#类的内置方法
print MyClass.__dict__
print '#' * 20
#对象的内置方法
print mc.__dict__
-------------------------结果如下----------------------------
c1.py:12: SyntaxWarning: name 'var5' is assigned to before global declaration
  global var5
**************************************************
类的公有属性 var1
类的私有属性 __var2
对象的公有属性 var3
对象的私有属性 __var4
函数的局部变量 var5
全局变量
{'__module__': '__main__', 'var1': '/xe7/xb1/xbb/xe7/x9a/x84/xe5/x85/xac/xe6/x9c/x89/xe5/xb1/x9e/xe6/x80/xa7 var1', 'fun2': <function fun2 at 0x7fafbf0f0938>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, 'fun1': <function fun1 at 0x7fafbf0f08c0>, '_MyClass__var2': '/xe7/xb1/xbb/xe7/x9a/x84/xe7/xa7/x81/xe6/x9c/x89/xe5/xb1/x9e/xe6/x80/xa7 __var2', '__doc__': None}
####################
{'_MyClass__var4': '/xe5/xaf/xb9/xe8/xb1/xa1/xe7/x9a/x84/xe7/xa7/x81/xe6/x9c/x89/xe5/xb1/x9e/xe6/x80/xa7 __var4', 'var3': '/xe5/xaf/xb9/xe8/xb1/xa1/xe7/x9a/x84/xe5/x85/xac/xe6/x9c/x89/xe5/xb1/x9e/xe6/x80/xa7 var3'}

3.3 类的方法总结

  1. 公有方法
  2. 私有方法
  3. 类方法
  4. 静态方法
  5. 内置方法
#!/usr/bin/python
#coding:utf8
class MyClass(object):
    name = 'Test'

    def __init__(self):
        self.fun1()
        self.__fun2()
        self.classFun()
        self.staticFun()

    def fun1(self):
        print self.name,
        print '我是公有方法'
        #self.__fun2()

    def __fun2(self):
        #私有方法外部不能直接调用,但是可以在内部调用
        print self.name,
        print '我是私有方法'

    @classmethod
    def classFun(self):
        #类里面的方法不能直接被类调用,需要装饰器classmethod修饰之后才能被类调用
        print self.name,
        print '我是类方法'

    @staticmethod
    def staticFun():
        #静态方法因为没有self参数,调用变量时需要加MyClass类名
        print MyClass.name,
        print '我是静态方法'

print '#'*10 +'内置方法调用结果' + '#'*10
mc = MyClass()
print '*'*10 +'手动调用结果' + '*'*10
#MyClass.fun1() 该方式无法执行会报错
mc.fun1()
MyClass.classFun()
MyClass.staticFun()
--------------------结果如下---------------------
##########内置方法调用结果##########
Test 我是公有方法
Test 我是私有方法
Test 我是类方法
Test 我是静态方法
**********手动调用结果**********
Test 我是公有方法
Test 我是类方法
Test 我是静态方法   

3.5 memcached启动脚本

#!/usr/bin/python
#conding:utf8
import sys
from subprocess import Popen,PIPE
import os
class Process(object):
    '''memcached rc scrip'''
    def __init__(self,name,program,args,workdir):
        '''初始化需要用的变量'''
        self.name = name
        self.program = program
        self.args = args
        self.workdir = workdir
    def _init(self):
        '''/var/tmp/memcached 判断pid文件及路径是否存在'''
        if not os.path.exists(self.workdir):
            os.mkdir(self.workdir)
            os.chdir(self.workdir)

    def _pidFile(self):
        '''/var/tmp/memcached/memcached.pid 定义pid文件路径'''
        return os.path.join(self.workdir,'%s.pid' %self.name)

    def _writePid(self):
        '''将pid写入文件中'''
        if self.pid:
            with open(self._pidFile(),'w') as fd:
                fd.write(str(self.pid))

    def start(self):
    '''start启动方法'''
        self._init()
        cmd = self.program + '' + self.args
        p = Popen(cmd, stdout=PIPE,shell=True)
        self.pid = p.pid
        self._writePid()
        print '/033[1;32m%s start Sucessful/033[0m' %self.name

    def _getPid(self):
        p = Popen(['pidof',self.name],stdout=PIPE)
        self.pid = p.stdout.read().strip()
        return self.pid

    def stop(self):
    '''stop停止方法'''
        pid = self._getPid()
        if pid:
            os.kill(int(pid),15)
            if os.path.exists(self._pidFile()):
                os.remove(self._pidFile())
                print '/033[1;32m%s is stoped/033[0m' %self.name
        else:
            print '/033[1;32m%s is not running... /033[0m' %self.name
    def restart(self):
    '''restart重启方法'''
        self.stop()
        self.start()
    def status(self):
    '''status查看状态'''
        pid = self._getPid()
        if pid:
            print '/033[1;32m%s is running... /033[0m' %self.name
        else:
            print '/033[1;32m%s is not running... /033[0m' %self.name

    def help(self):
    '''帮助'''
        print "/033[1;33mUsage start|stop|status|restart /033[0m "

def main():
'''主函数执行'''
    name = 'memcached'
    prog = '/usr/bin/memcached'
    args = ' -u nobody -p 11211 -c 1024 -m 64'
    wd = '/var/tmp/memcached'
    pm = Process(name = name,
                 program = prog,
                 args = args,
                 workdir = wd)
    try:
        cmd = sys.argv[1]
    except IndexError, e:
        pm.help()
        sys.exit()
    if cmd == 'start':
        pm.start()
    elif cmd == 'stop':
        pm.stop()
    elif cmd == 'restart':
        pm.restart()
    elif cmd == 'status':
        pm.status()
    else:
        pm.help()

if __name__ == "__main__":
    main()

给TA打赏
共{{data.count}}人
人已打赏
开发

Python第55天 Jenkins介绍

2023-9-11 18:33:06

开发

Python第44-45天 权限表设计

2023-9-11 18:33:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索