博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
utils/pkg_list_update.py
阅读量:4214 次
发布时间:2019-05-26

本文共 5500 字,大约阅读时间需要 18 分钟。

#python脚本的第一行表示这个是python脚本#!/usr/bin/env python#导入库import sysimport osimport requestsimport urlparseimport commandsimport BeautifulSoupimport reVERSION="5.0"#字典赋初值g_pkg_src = {     "CentOS" : { "rpm": "ftp://repoftp:repopushez7411@117.78.41.188/releases/"+VERSION+"/centos/SRPMS" },    "Ubuntu" : { "deb": "ftp://repoftp:repopushez7411@117.78.41.188/releases/"+VERSION+"/ubuntu/dists/estuary-"+VERSION+"/main/source/Sources" },    "Debian" : { "deb": "ftp://repoftp:repopushez7411@117.78.41.188/releases/"+VERSION+"/debian/dists/estuary-"+VERSION+"/main/source/Sources" },}#定义一个函数,来得到候选的包,看code主要是处理rpm源码包def decode_rpm_packages_list(ftp_url, platform, pkg_dict):    """    To get candidate packages     """#使用 commands 库并赋予形参的值    status, packages_rsp = commands.getstatusoutput("curl -l " + ftp_url + "/*")#去掉换行符       packages_rsp = packages_rsp.split('\n')#遍历保存在packages_rsp 中的包    for packagename in packages_rsp:#去掉包中的空格        packagename = packagename.strip()#如果包是以.src.rpm 结束的        if packagename.endswith('.src.rpm'):#从这里知道报名室友basename 和version组成,例如 kernel-5.0.src.rpm 通过rfind 和字符串截取分别得到包名和包的版本信息            pos = packagename.rfind('-')            packagename = packagename[:pos]            pos = packagename.rfind('-')            basename = packagename[:pos]            version =  packagename[pos+1:]#组成新的字符串            packagename = basename + "\t" + version#如果pkg_dict字典中包含packagename,则拿到packagename的值之后,后面添加上形参执行的字符串platform            if pkg_dict.has_key(packagename):                pkg_dict[packagename] = pkg_dict[packagename] + "," + platform#如果不存在的话,则以packagename 为key,以platfrom为值保存在pkg_dict            else :                pkg_dict[packagename] = platform    return#和上面的函数类似,这里处理deb的源码包def decode_deb_packages_list(src_url, platform, pkg_dict):    source_file = "./local_tmp_deb_source_file"#通过os.system 执行shell 命令下载deb 源码包    os.system("wget -O " + source_file + " " + src_url)        deb_dict = {}#打开这个文件,这里用with打卡效果更好    file_handle = open(source_file)    for line in file_handle:        elems = re.split('\ +', line)        packagename = ""		#这个文件中的每一行都是一个deb的源码包,这里是要找到包名        if len(elems) >= 3 and re.search('.orig.tar', elems[2]):            packagename = elems[2]        elif len(elems) >=4 and re.search('.orig.tar', elems[3]):            packagename = elems[3]                     if packagename != "":                        pos = packagename.find('.orig')            packagename = packagename[:pos]            pack_elems = packagename.split('_')            basename = pack_elems[0]            version = pack_elems[1]         #如果包名不为null,则把包名对应的  deb_dict 清空,为后面的重新复制做好准备             deb_dict[basename + "\t" + version] = 0	#和rpm 包相同的处理规则,更新pkg_dict 字典    for key in deb_dict.keys():        if pkg_dict.has_key(key):            pkg_dict[key] = pkg_dict[key] + "," + platform        else:            pkg_dict[key] = platform	#通过rm 命令删除这个文件    os.system("rm " + source_file)    returndef gen_pkg_list(pkg_list_filename):    pkg_dict = {}    for key in g_pkg_src.keys():        for pkg_type in g_pkg_src[key].keys():		#根据rpm还是deb分别更新对应的记录源码包的字典            if pkg_type == "rpm" :                decode_rpm_packages_list(g_pkg_src[key][pkg_type], key, pkg_dict)            elif pkg_type == "deb" :                decode_deb_packages_list(g_pkg_src[key][pkg_type], key, pkg_dict)#在pkg_dict 中添加3项    pkg_dict["cassandra\t3.0"] = "CentOS,Ubuntu"    pkg_dict["cassandra\t2.0"] = "CentOS"    pkg_dict["elasticsearch\t5.5"] = "CentOS"    filehandle = open(pkg_list_filename, "w")        default_str = '''* [Introduction](#1)* [Packages List](#2)# Open-Estuary Packages List## Introduction  It lists the packages which are maintained by Open-Estuary team so far.## Packages List Currently the following packages are supported by Open-Estuary repo:'''#打开pkg_list_filename,并写入default_str    filehandle.write("%s\n"%default_str)#继续写入    filehandle.write("|Package Name|Estuary Releases|Packages Releases|CentOS|Ubuntu|Debian|Notes|\n")    filehandle.write("|--|--|--|--|--|--|--|\n")#得到保存源码包的字典的key,并排序    pkg_keys = pkg_dict.keys()    pkg_keys.sort()    for pkg in pkg_keys:        elems = pkg.split('\t')		#拿到源码包中的distro ,对应前面函数中的platform        distro = pkg_dict[pkg]        distro_enable_dict = {}        for distro_key in g_pkg_src.keys():            if re.search(distro_key, distro):			#看这个源码包属于哪个os,                distro_enable_dict[distro_key] = "Y"		#获得前一句保存的os,如果没有就为空        centos = distro_enable_dict.get("CentOS", "")        ubuntu = distro_enable_dict.get("Ubuntu", "")        debian = distro_enable_dict.get("Debian", "")		#将这些信息写入文件中        filehandle.write("|%s|%s|%s|%s|%s|%s|%s|\n"%(elems[0], VERSION, elems[1], centos, ubuntu, debian, ""))    filehandle.write("||||||||\n")#关闭这个文件,如果有with打开这个文件的话,就不用关闭这个问题    filehandle.close()    return#如果__name__ == "__main__" 说明是从命令行来执行这个脚本,并不是调用这个脚本中的函数if __name__ == "__main__":    output_filename = "../packages_list.md"	#如果输入的参数大于等于2,就把第一个参数赋值给output_filename,否则output_filename 取默认值    if len(sys.argv) >= 2:        output_filename = sys.argv[1]	#输入的参数大于等于3    if len(sys.argv) >= 3:        old_version = VERSION		#第二个参数保存的是version        VERSION = sys.argv[2]        for key in g_pkg_src.keys():            for pkg_type in g_pkg_src[key].keys():                     url = g_pkg_src[key][pkg_type]                 url = url.replace(old_version, VERSION)				#更新g_pkg_src 中的下载链接rul,g_pkg_src相当于二维数组.在g_pkg_src 中key的值value 又是一个字典.                g_pkg_src[key][pkg_type] = url	#解析源码包    gen_pkg_list(output_filename)

转载地址:http://wrjmi.baihongyu.com/

你可能感兴趣的文章
中断API之disable_irq
查看>>
nova 中的guestfs
查看>>
nova中的localfs
查看>>
utils/rpm_build.sh
查看>>
查看模块参数
查看>>
udev重命名网口
查看>>
pgrep
查看>>
test-definitions/blob/master/toolset/util/parallel_cmds.py
查看>>
中断API之irq_activate
查看>>
中断API之tasklet_disable_nosync/tasklet_trylock/tasklet_unlock
查看>>
中断API之tasklet_init/tasklet_kill
查看>>
内存管理API之__free_pages
查看>>
内存管理API之__get_free_pages
查看>>
内存管理API之__get_vm_area
查看>>
内存管理API之krealloc
查看>>
内存管理API之ksize
查看>>
内存管理API之alloc_pages
查看>>
linux performance tool
查看>>
test-definitions/blob/master/auto-test/bazel/bazel.sh
查看>>
test-definitions/blob/master/auto-test/bigdata/bigdata.sh
查看>>