pscp多线程传输文件
前面说过pscp不支持多线程,所以在此特地实现了一个
程序分三个部分:
1、初始化各种参数,涉及getopt函数的使用
2、重新定义scp,实现传递IP然后远程拷贝
3、启动多线程调用scp,涉及多线程的启动和等待线程结束
import sys, getopt
import commands
import threading
p = 1
host_file = ""
source_file = ""
destin_file = "" #init arguments
opts, args = getopt.getopt(sys.argv[1:], "Hp:h:")
def usage():
print "python mypscp.py [-p threadNum] [-H] -h hostFile localFile1 ... remoteFullPath"
#print opts
#print args
if '-h' not in str(opts) or len(args) < 2:
usage()
sys.exit()
for op, value in opts:
if op == "-p":
p = int(str.strip(value))
if(p < 1):
usage()
sys.exit()
elif op == "-H":
usage()
sys.exit()
elif op == "-h":
host_file = str.strip(value)
if(host_file == ""):
usage()
sys.exit()
source_file = str.strip(args[0])
if(source_file == ""):
usage()
sys.exit()
destin_file = str.strip(args[1])
if(destin_file == ""):
usage()
sys.exit() #define scp()
def scp(ip):
ip = ip.strip()
mycommand = 'scp ' + source_file + ' ' + ip + ':'+ destin_file
#print mycommand
(status, output) = commands.getstatusoutput(mycommand)
if(str(status) == ''):
print ip,'[SUCCESS]'
else:
print status, output #read ip and start multi-thread
ips = []
threads = []
try:
with open(host_file) as host:
for ip in host:
ips.append(str.strip(ip))
except:
print host_file, ' is not exist' ipNum = len(ips)
threadNum = p
times = ipNum / p
yushu = ipNum % p
for i in range(times + 1):
if(times == 0 or i == times):
threadNum = yushu
for j in range(threadNum):
ip = ips[i*p + j]
#print ip
th = threading.Thread(target=scp, args=(ip,))
threads.append(th)
th.start()
for t in threads:
t.join()
测试结果:

ps:对于读取带选项参数和Python多线程参考了以下两篇博客
http://www.jb51.net/article/66539.htm
http://www.cnblogs.com/fnng/p/3670789.html
pscp多线程传输文件的更多相关文章
- Window、Ubuntu传输文件到阿里云服务器
Ubuntu传输文件到阿里云服务器 scp -r file(ubuntu的文件) root(用户名)@xx.xx.xx.xx(公网ip):/home/(目标文件夹) Window传输文件到阿里云服务器 ...
- Qt实现基于多线程的文件传输(服务端,客户端)
1. 效果 先看看效果图 这是传输文件完成的界面 客户端 服务端 2. 知识准备 其实文件传输和聊天室十分相似,只不过一个传输的是文字,一个传输的是文件,而这方面的知识,我已经在前面的博客写过了,不了 ...
- linux与linux,linux与windows之间用SSH传输文件
linux与linux,linux与windows之间用SSH传输文件linux与linux之间传送文件:scp file username@hostIP:文件地址 例: scp abc.txt ...
- 【转】QQ传输文件原理参考(来自互联网)
QQ的文件发送是怎样的过程呢?通常,发送文件的计算机首先要通过消息服务器将其IP地址发送给接收计算机,当接收计算机同意接收的确认消息反馈到消息服务器后,消息服务器将据此设置好文件传输对话.随即,发送计 ...
- netty4.x 传输文件
一:简介 netty传输文件的例子并不多,当前的项目刚才需要使用netty,所以就记录一下使用方法,使用netty传输文件,首先需要启动一个服务端,等待服务端请求监听,然后传输文件的时候,启动一个客户 ...
- java 多线程下载文件 以及URLConnection和HttpURLConnection的区别
使用 HttpURLConnection 实现多线程下载文件 注意GET大写//http public class MultiThreadDownload { public static void m ...
- Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)
本文转自博客:https://blog.csdn.net/black_3717/article/details/79769406 问题背景: 之前给客户部署我们一款EasyDSS云平台(配合EasyN ...
- python socket 传输文件
推荐资料 https://www.cnblogs.com/xiaokang01/p/9865724.html socket传输文件 思路: # 先将报头转换成字符串(json.dumps), 再将字符 ...
- jAVA基础 提高文件复制性能之多线程复制文件
利用IO流中的随机访问文件 RandomAccessFile 和文件通道 FileChanne 复制文件可大大提高文件的读写效率,在此基础上利用多线程复制文件使其性能更优.因线程的个数可根据文件的大小 ...
随机推荐
- Android 返回键的处理
多网友不明确怎样在Android平台上捕获Back键的事件.Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台.而回到桌面的尴尬情况,在Android上有两种方法来获取该 ...
- js 时间戳精确值的问题
最近做一个多图上传的功能,通过name + 时间戳命名,结果发现时间戳竟然一样,一直以为是代码逻辑的问题,结果出错在时间戳的获取上了. 关于时间戳的获取方式: 1.Date.parse() var d ...
- isMemberOf与isKindOf的区别
这两个方法常常会困惑我们,它们有什么区别呢? 定义 首先,我们来看看它们的定义. isKindOfClass: 官方解释:Returns a Boolean value that indicates ...
- Hive 特性及原理
特点:Hive是构建在hadoop之上的数据仓库.数据存储在hdfs上,数据计算用的mapreduce框架.用户无需掌握MR的编写,通过类SQL语句即可自动生成查询计划. 主要内容: 接入入口 ...
- ubuntu16.04和服务器 caffe 安装
在centos6.X上安装caffe 0.编译安装gcc4.8.5 由于centos6.x中的gcc版本老旧,不支持c++11所以要安装gcc4.8.5,以下是安装教程.参考CentOS 6.4 编译 ...
- Android上的水果忍者刀锋效果(JAVA实现)
显示刀锋的View package com.wbhuang.myninjia; import java.util.ArrayList; import java.util.List; import an ...
- BestCoder4 1002 Miaomiao's Geometry (hdu 4932) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4932 题目意思:给出 n 个点你,需要找出最长的线段来覆盖所有的点.这个最长线段需要满足两个条件:(1 ...
- Android中android:visibility的3中属性的剖析
在Android中控件或者布局的可见性android:visibility有3中情况,他们分别是: View.VISIBLE,View.UNVISIBLE,View.GONE View.VISIBLE ...
- ES6之Object
对象属性模型的相关方法: 对象自身所有属性名称 Object.getOwnPropertyNames(obj) //[] 获取某个属性的attribute对象 Object. ...
- Laravel实践-自定义全局异常处理
在做API时,需要对一些异常进行全局处理 百牛信息技术bainiu.ltd整理发布于博客园比如添加用户执行失败时,需要返回错误信息 // 添加用户 $result = User::add($user) ...