python笔记20181207

import sys
import os
from subprocess import PIPE,Popen    #调用shell命令行。
class Progames(object):  # 创建一个类
    def __init__(self, name, progame, workdir, args):  # 通过构造函数,在脚本运行的时候就传入4个参数,就不用手动去指定参数了。
        self.name = name
        self.progame = progame
        self.args = args
        self.workdir = workdir
    def _init(self):       #初始化普通的方法。判断有没有目录,如果没有就创建。
        if not os.path.exists(self.workdir):     #判断文件是否存在。如果不存在,创建目录
            os.mkdir(self.workdir)               #不存在就创建目录,
            os.chdir(self.workdir)               #进入目录,chdir 类似cd命令
    def _pidFile(self):                          #返回文件路径的方法。
        return os.path.join(self.workdir,"%s.pid" % self.name)   #连接路径和文件名,形成pid的绝对路径
    def _writePid(self):                         #定义写入pid值得方法。
        if self.pid:                             #如果有pid
            with open(self._pidFile(),'w') as fd:     #打开pid文件写入
                fd.write(str(self.pid))               #得到的值是数值型的,需要转换str 才可以写入
    def start(self):  # 定义start 方法。启动程序
        pid = self._getPid()                          #获取PID
        if pid:                                       #如果有PID提示。
            print("%s is running" % self.name)
            sys.exit()
        self._init()                                  #调用判断pid文件是否存在的方法
        cmd = self.progame + ' '+ self.args           #定义启动的命令。shell下的启动命令。
        p = Popen(cmd,stdout=PIPE,shell=True)
        self.pid = p.pid
        self._writePid()     #调用写入方法。
        print("%s start sucessfull" % (self.name))
    def _getPid(self):                               #定义获取pid的方法。
        p = Popen(['pidof',self.name],stdout=PIPE)        #执行获取PID的命令
        pid = p.stdout.read().strip()                  #获取到的PID分割一下,删除换行符
        return pid                                     #返回pid的值
    def stop(self):  # 定义stop方法,关闭程序
        pid = self._getPid()                          #获取PID
        if pid:                                       #如果有PID的话
            os.kill(int(pid),15)                     #因为获取到的是一个字符串,要转换整形才可以杀死
            if os.path.exists(self._pidFile()):      #如果pid文件存在
                os.remove(self._pidFile())           #删除文件
            print("%s is stopped" % self.name)
    def restart(self):  # 定义重启方法,重启程序,也就是执行关闭和启动的方法。
        self.stop()
        self.start()
    def status(self):  # 定义status方法,查看运行情况
        pid = self._getPid()              #判断pid是否存在
        if pid:
            print("%s is running" % self.name)
        else:
            print("$s is not running" % self.name)
    def help(self):  # 定义help方法,查看帮助
        print("Usage: %s {start|restart|stop|status}" % __file__)   #%__file__ 类似shell的$0代表脚本本身。
 
def main():  # 定义一个函数,通过调用这个函数来控制程序。
    name = 'memcached'                                   #这几个参数就是调用类时初始化传入的参数
    progame = '/usr/bin/memcached'
    workdir = '/var/tmp/memcached'
    args = '-u nobody -p 11211 -c 1024 -m 64'
    pm = Progames(name = name,
                  progame = progame,
                  workdir = workdir,
                  args = args)
    try:                                #判断输入的第一个参数 类似$1
        cmd = sys.argv[1]
    except IndexError, e:              #当捕获了indexerror错误后,输出错误信息
        print("Option error")
        sys.exit()
    if cmd == 'start':               #如果参数为start ,调用start方法
        pm.start()
    elif cm == 'stop':               #如果参数为start ,调用stop方法
        pm.stop()
    elif cm == 'restart':            #如果参数为start ,调用restart方法
        pm.restart()
    elif cm == 'status':             #如果参数为start ,调用status方法
        pm.status()
    else:                            #如果都不是以上参数,输出help信息
        pm.help()
 
if __name__ == '__main__':  # 如果调用的是本身,就启动main函数。
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值