代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Python
】
批量从本地上传文件到指定服务器或从指定服务器下载文
作者:
欣玉
/ 发布于
2016/6/27
/
1181
#!/usr/bin/env python #--*-- coding: utf-8 --*-- #author: liangshuang.qi import os import sys import time import argparse import paramiko from multiprocessing import Pool, Manager User = 'root' Process_number = 8 Pkey_file = os.path.expanduser('~/.ssh/id_rsa') Key = paramiko.RSAKey.from_private_key_file(Pkey_file) def multiFTP(l, s, d, choice) : try : host_ip = l.pop() except IndexError : sys.exit(1) try : t = paramiko.Transport((host_ip, 22)) t.connect(username=User, pkey=Key) sftp = paramiko.SFTPClient.from_transport(t) if choice == 'get' : local_file = os.path.join(s, host_ip+'_'+os.path.split(d)[-1]) sftp.get(d, local_file) get_size = os.path.getsize(local_file) return (host_ip, 'Get size %d'%(get_size)) elif choice == 'put' : sftp.put(s, d) des_size = int(sftp.stat(d).st_size) return (host_ip, 'Put size %d'%(des_size)) sftp.close() except Exception, e : return (host_ip, '%s exception'%(choice)) def run() : p=argparse.ArgumentParser(description='这个工具主要用来并发下发文件到设备上,或者从设备上面获取文件') p.add_argument('-l', '--list', dest='list', type=argparse.FileType('rt'), help='从文件里面读取主机IP') p.add_argument('--stdout', dest='stdout', default=sys.stdout, type=argparse.FileType('wt'), help='默认正确输出结果到屏蔽,指定参数可以将结果输出到文件') p.add_argument('--stderr', dest='stderr', default=sys.stderr, type=argparse.FileType('wt'), help='默认错误输出结果到屏幕,指定参数可以将结果输出到文件') p.add_argument('-s', '--source', dest='src_file', type=str, help='指定源文件地址(当cmd为put时,指定上传文件,当cmd为get时,指定下载目录)') p.add_argument('-d', '--destination', dest='des_file', type=str, help='指定目的文件地址') p.add_argument('-c', '--command', dest='cmd', type=str, help='get从服务器下载文件,put上传文件到服务器') options = p.parse_args() if options.list : stdin = options.list else : p.print_help() sys.exit(1) if options.cmd == 'put' : if options.des_file : des_file = options.des_file else : sys.exit('上传目的文件名没指定') cmd = options.cmd if os.path.exists(options.src_file) : src_file = options.src_file else : sys.exit('上传源文件不存在') elif options.cmd == 'get' : if options.des_file : des_file = options.des_file else : sys.exit('下载的目的文件没有指定') cmd = options.cmd if os.path.isdir(options.src_file) : src_file = options.src_file else : sys.exit('必须指定一个下载目录') else : p.print_help() sys.exit(1) hosts_ip = [line.strip() for line in stdin.xreadlines()] stdin.close() pool = Pool(processes=Process_number) manager = Manager() l = manager.list(hosts_ip) res_alist = [] for i in range(len(hosts_ip)) : res_alist.append(pool.apply_async(multiFTP,(l, src_file, des_file, cmd))) for res in res_alist : print >> options.stdout,'%s\t\t%s'%(res.get()) def main() : global hosts_ip hosts_ip = [] run() if __name__ == '__main__' : main()
试试其它关键字
同语言下
.
比较两个图片的相似度
.
过urllib2获取带有中文参数的url内容
.
不下载获取远程图片的宽度和高度及文件大小
.
通过qrcode库生成二维码
.
通过httplib发送GET和POST请求
.
Django下解决小文件下载
.
遍历windows的所有窗口并输出窗口标题
.
根据窗口标题调用窗口
.
python 抓取搜狗指定公众号
.
pandas读取指定列
可能有用的
.
比较两个图片的相似度
.
过urllib2获取带有中文参数的url内容
.
不下载获取远程图片的宽度和高度及文件大小
.
通过qrcode库生成二维码
.
通过httplib发送GET和POST请求
.
Django下解决小文件下载
.
遍历windows的所有窗口并输出窗口标题
.
根据窗口标题调用窗口
.
python 抓取搜狗指定公众号
.
pandas读取指定列
欣玉
贡献的其它代码
(
17
)
.
定时清空文件内容,定时记录文件大小
.
JAVA对象转换为JSON及日期格式转换处理
.
分割字符串返回表
.
精确测量一个方法执行所花费的时间
.
创建SQLSERVER MD5()
.
获取当天或某个日期是星期几
.
可重复使用的存储过程(增,删,改,查,分页)
.
批量从本地上传文件到指定服务器或从指定服务器下载文
.
中英文排序算法
.
List的Find方法的使用
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3