当前位置: 首页 > news >正文

分享一个 ftp下载、解压、更新依赖库文件的 python 脚本

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

#!/usr/bin/env python
# -*- coding: utf8 -*-

# ftp下载、解压、更新依赖库文件

import os, sys, stat, shutil, string, zipfile, ftplib
from urlparse import urlparse

# list of depended libraries
urllist = [
	"ftp://1.2.3.4/foo.zip",
	"ftp://1.2.3.4/bar.zip"
	]

def remove_old(lst) :
	print "cleaning libraries..."
	for url in lst :
		try :
			dirname = os.path.splitext(os.path.split(urlparse(url).path)[1])[0]
			print "cleaning [%s]..." % (dirname)
			shutil.rmtree(dirname)
			print "[%s] cleaned." % (dirname)
		except Exception, e :
			continue
	print "libraries cleaned."
	pass

def ftp_download(host, port, username, password, ftpdir, zipname) :
	try :
		print "downloading file [%s]..." % (zipname)
		hftp = ftplib.FTP()
		hftp.connect(host, port)
		hftp.login(username, password)
		hftp.cwd("/")
		hftp.cwd(ftpdir)
		fp = open(zipname, "wb")
		hftp.retrbinary("RETR " + zipname, fp.write)
		hftp.close()
		fp.close()
	except Exception, e :
		print "downloading file [%s] failed, err %s." % (zipname, e)
		return -1
	print "file [%s] downloaded." % (zipname)
	return 0
	pass

def unzip(zipname, path) :
	try :
		print "unziping file [%s]..." % (zipname)
		os.mkdir(path)
		zf = zipfile.ZipFile(zipname, "r")
		zf.extractall(path)
		zf.close()
		os.remove(zipname)
	except Exception, e :
		print "unziping file [%s] failed." % (zipname)
		return -1
	print "file [%s] unziped." % (zipname)
	return 0
	pass

def get_lib(url) :
	print "getting library [%s]..." % url
	tp = urlparse(url)
	host = tp.netloc
	path = tp.path
	[ftpdir, zipname] = os.path.split(path)
	localdir = os.path.splitext(zipname)[0]
	[port, username, password] = [21, "anonymous", "anonymous"]
	ret = ftp_download(host, port, username, password, ftpdir, zipname)
	if ret != 0 :
		print "getting library [%s] failed." % url
		return -1
	ret = unzip(zipname, localdir)
	if ret != 0 :
		print "getting library [%s] failed." % url
		return -1
	print "library [%s] got." % url
	return 0
	pass

def update_libs(lst) :
	print "updating libraries..."
	for url in lst :
		ret = get_lib(url)
		if ret != 0 :
			print "updating libraries failed."
			return
	print "libraries updated."
	pass

# main
if __name__ == "__main__" :
	print "depended libraries:"
	for url in urllist :
		print "\t[%s]" % url
	print "========================================"
	remove_old(urllist)
	update_libs(urllist)
	pass

简单起见,没有把依赖库列表和代码分开,自定义依赖库直接改代码中的 url 数组即可。

转载于:https://my.oschina.net/legendlee/blog/465793

相关文章:

  • wifi的web 认证。
  • Servlet开篇
  • Linode Centos6.5从零开始装环境...流水账
  • 在Linux系统中如何识别U盘
  • sql语句中in与exist not in与not exist 的区别
  • android 关于 android sdk manager 更新,下载慢的问题
  • (笔试题)合法字符串
  • 【重磅】大众点评运维架构图文详解 @马哥教育联合创始人张冠宇
  • linux总结
  • 6月又过去一大半了。
  • 通过Exchange Server 中的OWA页面找回被删除的邮件
  • 基于socket.io的实时消息推送
  • 找规律 UVALive 6506 Padovan Sequence
  • 图书管理系统——测试与调试
  • .net 发送邮件
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • Docker容器管理
  • git 常用命令
  • golang中接口赋值与方法集
  • HTML中设置input等文本框为不可操作
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Koa2 之文件上传下载
  • Linux链接文件
  • Lsb图片隐写
  • miaov-React 最佳入门
  • mysql_config not found
  • Mysql5.6主从复制
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 对象管理器(defineProperty)学习笔记
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 配置 PM2 实现代码自动发布
  • 前端
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用docker-compose进行多节点部署
  • 算法---两个栈实现一个队列
  • 智能网联汽车信息安全
  • 阿里云服务器如何修改远程端口?
  • 带你开发类似Pokemon Go的AR游戏
  • ​​​​​​​​​​​​​​Γ函数
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (分布式缓存)Redis哨兵
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十六)串口UART
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (正则)提取页面里的img标签
  • ..回顾17,展望18