文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 申请license写入et

2023-01-31 02:55

关注

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

问题是这样的:机器需要申请一个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)
搞定了。。。测试成功
前提是查资料查了一些


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯