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

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 《Programming in Lua 3》读书笔记(十六)

    日期 xff1a 2014 7 23 Part The Standard Libraries 20 The Table Library table库包含一些辅助函数用以类似与数组一样操作table 提供了从list内插入和删除元素的操作 x
  • 重磅系列文章|UI2Code智能生成Flutter代码--整体设计篇 ...

    闲鱼技术 上叶 背景 随着移动互联网时代的到来 xff0c 人类的科学技术突飞猛进 然而软件工程师们依旧需要花费大量精力在重复的还原UI视觉稿的工作 UI视觉研发拥有明显的特征 xff1a 组件 xff0c 位置和布局 xff0c 符合机器
  • linux debian系统卸载jdk,Debian/Ubuntu系统 JDK卸载、安装、环境配置

    环境 xff1a Linux内核版本4 17 Oracle jdk 11 0 2 JDK 8同样也是设置 Debian9系统 注意 xff1a 1 Open JDK和Oracle JDK的安装过程只是下载的连链接不一样 2 有的Linux系
  • MySQL 8.0 Windows zip 安装过程

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 准备 xff1a MySQL8 0 Windows zip包下载地址 xff1a https cdn mysql com Downloads MySQL 8 0 mysql
  • nohup后台执行脚本并输入日志到指定目录 &

    后台执行命令 xff0c 并输出目录到指定目录 root 64 localhost smgpSend Log nohup tar zcvf sendThread bak tar sendThread bak gt gt 1 txt amp
  • 在 Laravel 5 中集成七牛云存储实现云存储功能

    本扩展包基于https github com qiniu php sdk 开发 xff0c 是七牛云储存 Laravel 5 Storage版 xff0c 通过本扩展包可以在Laravel 5中集成七牛云存储功能 1 安装配置 使用之前 x
  • BSS段、数据段、代码段、堆与栈

    BSS段 xff1a BSS段 xff08 bss segment xff09 通常是指用来存放程序中未初始化的全局变量的一块内存区域 BSS是英文Block Started by Symbol的简称 BSS段属于静态内存分配 数据段 xf
  • Java字符串排序中文+数字

    编写日期 xff1a 2013年9月15日 另一中解法 xff1a 点击查看 解决思路 xff1a 在Java中 xff0c 排序需要复写的是 equals 方法 和 Comparable lt T gt 接口 的public int co
  • UIView 中常见的方法总结

    addSubview 添加一个子视图到接收者并让它在最上面显示出来 void addSubview UIView view 讨论 这方法同样设置了接收者为下一个视图响应对象 接收者保留视图 如果你使用removeFromSuperview方
  • docker方式部署gitlab

    docker方式部署gitlab 说明 操作系统 CentOS Linux release 7 9 2009 Core docker版本 20 10 17主机ip地址 172 16 100 107gitlab cn官网安装教程 https
  • iOS libc++abi.dylib: handler threw exception 错误的解决方案

    简单说下背景 xff1a 最近把工具和SDK都进行了升级Xcode4 5和iOS6 xff0c 无意之中测出了一个 必现的bug xff1a libc 43 43 abi dylib handler threw exception libc
  • 后羿射日般的精准 - 阿里云ECS调度是如何炼成的

    1 引子 弹性计算服务ECS xff08 Elastic Compute Service xff09 是阿里云营收的中流砥柱和流量担当 作为各行业客户新业务和技术创新的发动机和使能者 xff0c ECS不仅能在10分钟内交付出一个中等体量互
  • java每日小算法(12)

    程序12 题目 xff1a 企业发放的奖金根据利润提成 利润 I 低于或等于10万元时 xff0c 奖金可提10 xff1b 利润高于10万元 xff0c 低于20万元时 xff0c 低于10万元的部分按10 提成 xff0c 高于10万元
  • strong_alias && weak_alias && __attribute__

    为了查看linux下malloc的实现函数 xff0c 下载了Glibc的源码文件 xff0c 可是找不到实现的函数在哪里 看文件名 应该是在malloc malloc c里面 发现 libc malloc的实现比较像 怎么从malloc到
  • glog

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 安装配置 1 简介 google 出的一个C 43 43 轻量级日志库 xff0c 支持以下功能 xff1a 参数设置 xff0c 以命令行参数的方式设置标志参数来控制
  • mysql 引擎 校对_mysql字符集与校对集详解

    1 字符集 character 设置数据存储编码格式 1 utf8 2 utf8mb4 支持Emoji 表情 Emoji 是一种特殊的 Unicode 编码 xff0c 常见于 ios 和 android 手机上 2 校对集 collate
  • BSS段和数据段

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 内存分段 xff08 英语 xff1a Memory segmentation xff09 xff0c 一种电脑内存的管理技术 xff0c 它将电脑的主内存分成许多区段 x
  • Zabbix各种报错信息和遇到的问题(持续更新)

    1 Zabbix报警 icmp pinger processes more than 75 busy root 64 localhost zabbix vi etc zabbix zabbix server conf 将这个值设置成Star
  • 自动化运维之 Kerberos 账号信息管理平台

    公司的自动化项目之一 公司的服务器超多 xff0c 需要一个用来管理服务器权限的系统 主要是实现 用一个账号 xff0c 可以让你登录所有的服务器 xff0c 也可以让你身无无分文 就是这样的一个操作的平台 5 25 数据库的展现已经做完
  • 分享一个 ftp下载、解压、更新依赖库文件的 python 脚本

    2019独角兽企业重金招聘Python工程师标准 gt gt gt code usr bin env python coding utf8 ftp下载 解压 更新依赖库文件 import os sys stat shutil string