前面说过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多线程传输文件的更多相关文章

  1. Window、Ubuntu传输文件到阿里云服务器

    Ubuntu传输文件到阿里云服务器 scp -r file(ubuntu的文件) root(用户名)@xx.xx.xx.xx(公网ip):/home/(目标文件夹) Window传输文件到阿里云服务器 ...

  2. Qt实现基于多线程的文件传输(服务端,客户端)

    1. 效果 先看看效果图 这是传输文件完成的界面 客户端 服务端 2. 知识准备 其实文件传输和聊天室十分相似,只不过一个传输的是文字,一个传输的是文件,而这方面的知识,我已经在前面的博客写过了,不了 ...

  3. linux与linux,linux与windows之间用SSH传输文件

    linux与linux,linux与windows之间用SSH传输文件linux与linux之间传送文件:scp file username@hostIP:文件地址    例: scp abc.txt ...

  4. 【转】QQ传输文件原理参考(来自互联网)

    QQ的文件发送是怎样的过程呢?通常,发送文件的计算机首先要通过消息服务器将其IP地址发送给接收计算机,当接收计算机同意接收的确认消息反馈到消息服务器后,消息服务器将据此设置好文件传输对话.随即,发送计 ...

  5. netty4.x 传输文件

    一:简介 netty传输文件的例子并不多,当前的项目刚才需要使用netty,所以就记录一下使用方法,使用netty传输文件,首先需要启动一个服务端,等待服务端请求监听,然后传输文件的时候,启动一个客户 ...

  6. java 多线程下载文件 以及URLConnection和HttpURLConnection的区别

    使用 HttpURLConnection 实现多线程下载文件 注意GET大写//http public class MultiThreadDownload { public static void m ...

  7. Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)

    本文转自博客:https://blog.csdn.net/black_3717/article/details/79769406 问题背景: 之前给客户部署我们一款EasyDSS云平台(配合EasyN ...

  8. python socket 传输文件

    推荐资料 https://www.cnblogs.com/xiaokang01/p/9865724.html socket传输文件 思路: # 先将报头转换成字符串(json.dumps), 再将字符 ...

  9. jAVA基础 提高文件复制性能之多线程复制文件

    利用IO流中的随机访问文件 RandomAccessFile 和文件通道 FileChanne 复制文件可大大提高文件的读写效率,在此基础上利用多线程复制文件使其性能更优.因线程的个数可根据文件的大小 ...

随机推荐

  1. debian apt-get工作的原理

    1 apt-get update apt-get update并没有将远程仓库的包都下载到本地,而是通过访问远程仓库创建或者更新了远程仓库的本地索引,索引文件放在/var/lib/apt/lists目 ...

  2. jQuery 怎么获取对象

    1.JQuery的核心的一些方法 each(callback) '就像循环 $("Element").length; ‘元素的个数,是个属性 $("Element&quo ...

  3. SVN地址正确,能在网页打开,但是检出失败解决方法

    TortoiseSVN缓存问题 右键点击TortoiseSVN -> Settings -> Saved Data, 点击个个“Clear”按钮,把本地缓存都清除了,点击“确定”: 再重新 ...

  4. redis10---Setbit 的实际应用

    Setbit 的实际应用 场景: 1亿个用户, 每个用户 登陆/做任意操作 ,记为 今天活跃,否则记为不活跃 每周评出: 有奖活跃用户: 连续7天活动,每月评,等等. 思路: Userid dt ac ...

  5. 使用Windows Debugger调试托管代码----引用自官方帮助文档

    以下文字引用在Windbg的帮助文档.觉得对初次调试托管代码,非常有用,故粘贴至此. ========================================================= ...

  6. YTU 2417: C语言习题 字符串长度

    2417: C语言习题 字符串长度 时间限制: 1 Sec  内存限制: 128 MB 提交: 758  解决: 548 题目描述 写一函数,求一个字符串的长度.在main函数中输入字符串,并输出其长 ...

  7. [Silverlight 2.0 控制物体绕圆弧运行(C#初探篇)]

    我自己写的第一个 Silverlight 2.0 程序    [Silverlight 2.0 控制物体绕圆弧运行(C#初探篇)]            程序运行时:小地球将绕着圆形轨迹做圆周运动. ...

  8. Perl解析JSON数据精解

    简介:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - Dece ...

  9. LA-4356&&hdu-2469 (极角排序+扫描线)

    题目链接: Fire-Control System Time Limit: 12000/5000 MS (Java/Others)     Memory Limit: 32768/32768 K (J ...

  10. Xcode清楚缓存、清理多余证书路径

    Xcode清除缓存.清理多余证书 1.删除Xcode中多余的证书provisioning profile 手动删除: Xcode6 provisioning profile path: ~/Libra ...