linux 下 python 脚本打包 程序运行环境(APP+动态库)

#!/usr/bin/python3
import os, sys
def runcommand():
	if len(sys.argv) !=3:
		print("usage:./cpApplib.py filename path\n")
		return
	substr = '{ print $3}'
	cmdstr = "ldd {} | awk '{}'".format(sys.argv[1],substr)
	libFilenames = []
	for line in os.popen(cmdstr,"r"):
		line=line.replace("\n","").replace("\r","")
		if '.so' in line:
			filelen=line.find(".so")
			libfilename=line[:filelen]
			libFilenames.append(libfilename)
	if len(libFilenames) !=0:
		for onefilename in libFilenames:
			cpcmdstring = "cp -arf {}* {}".format(onefilename,sys.argv[2])
			rmStaticLibCmd= "rm -rf {}/*.a".format(onefilename,sys.argv[2]);
			os.system(cpcmdstring)
			os.system(rmStaticLibCmd)
		cpAppCmsString = "cp -arf {} {}".format(sys.argv[1],sys.argv[2])
		os.system(cpAppCmsString)
	
if __name__ == '__main__':
	runcommand()

使用方法:        

#./cpApplib.py 文件名字   打包路径

下面将打包后的文件夹里面的库文件 拷贝至目标机, 若目标里面以后该库则不拷贝

#!/usr/bin/python3
 
import os, sys

def getBaseName(filename):
	strlist = filename.split("/")
	if len(strlist) ==0:
		return filename
	else:
		return strlist[len(strlist)-1]
def getLdcofigResult():
	cmdstr = "ldconfig --print"
	libFilenames = []
	for line in os.popen(cmdstr,"r"):
		line=line.replace("\n","").replace("\r","")
		if '/' in line:
			filelen=line.find("/")
			#libfilename 绝对路径名
			libfilename=line[filelen:]
			#libfilename xiangdui路径名
			libfilename = getBaseName(libfilename)
			if '.so' in libfilename:
				filelenso=libfilename.find(".so")
				libfilenameNoSo=libfilename[:filelenso]
				libFilenames.append(libfilenameNoSo)
				#无.so的后缀名
				#print(libfilenameNoSo)
	return libFilenames
 
def walkFile(path):
	libFilenames = []
	for root, dirs, files in os.walk(path):
        # 遍历文件
		for libfilename in files:
			if '.so' in libfilename:
				filelenso=libfilename.find(".so")
				libfilenameNoSo=libfilename[:filelenso]
				libFilenames.append(libfilenameNoSo)
	return libFilenames
 
def runcommand():
	if len(sys.argv) !=3:
		print("usage:./mycpLib2Target.py srcPath dstPath\n")
		return
	libFilenamesLdconfig = getLdcofigResult()
	libFilenamesInPath = walkFile(sys.argv[1])
	
	#remove same item
	libFilenamesLdconfig = list(set(libFilenamesLdconfig))
	libFilenamesInPath = list(set(libFilenamesInPath))
	
	
	for file in libFilenamesInPath:
		if file not in libFilenamesLdconfig:
			cmdstring = "mv -f {}/{}* {}".format(sys.argv[1],file,sys.argv[2])
			print(cmdstring)
			os.system(cmdstring);
	
if __name__ == '__main__':
	runcommand()

使用方法
:./mycpLib2Target.py srcPath dstPath

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值