Python 申请license写入et

发布时间:2019-08-29 07:42:47编辑:auto阅读(1311)

    今天修正了一个问题,本来以为很简单的东西,后来思考一下,发现不完美,于是各种改,各种查资料,后来发现一种比较满意的方法,利用空闲时间记录下来

    问题是这样的:机器需要申请一个license,其实就是通过check_lic命令生成一个注册码,把这个注册码通过服务器转成一个对应的序列号,最后把序列号写入/etc/rc.local

    于是乎,开始干:

    一开始是这样想的,第一个函数就是执行check_lic命令,返回一个注册码,第二个函数把这个注册码生成的序列号写入指定文件就ok,于是乎,代码虎虎的写完了,不超过两分钟写完:。。。。是这样的代码:

    #encoding:utf-8
    
    import subprocess
    import os
    
    def check_lic():
        p = subprocess.Popen('check_lic',shell = True,stdout=subprocess.PIPE)
        returnCode = p.wait()
        if returnCode == 0:
            out = p.stdout.readlines()
            ret = ''.join(out)
            ret = ret.strip()
            return ret
        else:
            print "check_lic run errot"
            return False
    def write_in_local(lic):
        ret = '\n' + "/usr/sbin/check_lic " + lic
        with open('/etc/rc.local','a') as f:
            f.write(ret)
            f.flush()
            os.fsync(f)
    
    if __name__ == "__main__":
        ret = check_lic()
        #这里简单测试下,直接写入ret,不进行转码
        write_in_local(ret)
    
    在/etc/rc.local中测试了下效果,发现在文件最后面一行,写入了我们需要的东西,本以为大功告成,但是凉水来了。。。。/etc/rc.local中原来有一个check_lic开头的行,打了新的license,原来的为何不删掉?不同版本的rc.local可能最后一行会存在一个“exit 0”这样一行,那直接后面添加,就不会执行的。。。

    所以,需求变了,首先,删掉原来的存在check_lic的行,第二,如果存在“exit 0”将我们要写入的东西加到"exit 0"之前行,后来我想了下,为何要留着“exit 0”,还不如删掉,反正没啥用

    import subprocess
    import os
    import re
    
    def check_lic():
        p = subprocess.Popen('check_lic',shell = True,stdout=subprocess.PIPE)
        returnCode = p.wait()
        if returnCode == 0:
            out = p.stdout.readlines()
            ret = ''.join(out)
            ret = ret.strip()
            #print ret
            #print type(ret)
            return ret
        else:
            digi_debug ("check_lic run error!")
            EXIT()
    
    def write_in_local(ret):
        ret = "\n" +  "/usr/sbin/check_lic " + ret
        print ret
        new_txt = []
        reg1 = "check_lic"
        reg2 = 'exit 0'
        with open("/etc/rc.local",'r+') as title_txt:
            full_txt = title_txt.readlines()
            for line in full_txt:
                if re.search(reg1,line) or re.search(reg2,line):
                    continue
                else:
                    new_txt.append(line)
            title_txt.seek(0)
            title_txt.truncate(0)
            title_txt.writelines(new_txt)
            title_txt.write(ret)
            title_txt.flush()
            os.fsync(title_txt)
    
    if __name__ == "__main__":
            ret = check_lic()
            write_in_local(ret)
    搞定了。。。测试成功
    前提是查资料查了一些


关键字