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 复制文件可大大提高文件的读写效率,在此基础上利用多线程复制文件使其性能更优.因线程的个数可根据文件的大小 ...
随机推荐
- 为什么java web项目中要使用spring
1 不使用spring的理由 spring太复杂,不利于调试. spring太复杂,不利于全面掌控代码. spring加载bean太慢. 等等. 2 对不使用spring理由的辩驳 spring io ...
- ermissions on /usr/local/mongodb/conf/keyFile are too open
ermissions on /usr/local/mongodb/conf/keyFile are too open > rs.initiate(cfg); { "ok" : ...
- CSS中的那点事儿(一)--- CSS中的单位1
单位主要用在规定元素的数值性css属性的,这里主要讨论应用的比较多的是width height padding margin font-size,而单位中应用最广泛就是%.px.em 百分比 百分比 ...
- POJ 2017 Speed Limit (直叙式的简单模拟 编程题目 动态属性很少,难度小)
Sp ...
- xunit输出output到控制台
1.https://xunit.github.io/docs/capturing-output 里面似乎提到2个方法,第二个方法还需要在配置文件中添加appSetting 这里采用第一种方法, 1.添 ...
- Burpsuite实验(二)
一.这次我们使用一下burpsuite的代理拦截功能. 图中的proxy是代理的选项,其中intercept是拦截的功能,在浏览器中请求的包,都经过它. 这是打开拦截时候的状态.forward是通过此 ...
- 使用SVPullToRefresh实现下拉刷新和下拉加载
移动端开发中,“下拉刷新”和“上拉加载更多”早已在各大App中随处可见.也非常容易就能找到直接可供使用的第三方资源.譬如EGOTableViewPullRefresh(下拉刷新)和LoadMoreTa ...
- [shell test] multiple conditions
Classic technique (escape metacharacters): if[ \( $g -eq 1-a "$c"="123" \) -o ...
- CS231n 2016 通关 第二章-KNN
课程内容全纪录: 1.讲解图像分类的难点 1.光照强度 2.主体变形 3.主体与背景咬合 4.主体与背景相接近 5.同类别间存在区别 2.KNN 1.最近邻算法 2.Knn 3.hyperpara ...
- Bootstrap Notify
https://github.com/mouse0270/bootstrap-notify $.notify('Hello World', { offset: { x: 50, y: 100 } }) ...