前面说过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. 【POJ 1159】Palindrome

    [POJ 1159]Palindrome 近期各种题各种奇葩思路已经司空见惯了...又新出个滚动数组= = 该题另一点须要知道 最少须要补充的字母数 = 原序列S的长度 - S和S'的最长公共子串长度 ...

  2. Immutable学习及 React 中的实践

    为什么用immutable.js呢.有了immutable.js可以大大提升react的性能. JavaScript 中的对象一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原 ...

  3. android TextView 设置部分文字背景色 和 文字颜色

    通过SpannableStringBuilder来实现,它就像html里边的元素改变指定文字的文字颜色或背景色 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  4. Java经典算法大全

    1.河内之塔.. 2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6. ...

  5. [Selenium] The commonly used validation method

    Assert.assertTrue(tmpEl.getAttribute("class").contains("selected"),"The fol ...

  6. sscanf在字符串中的一些使用

    弟弟的作业 你的弟弟刚做完了"100以内数的加减法"这部分的作业,请你帮他检查一下.每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过 ...

  7. c++中static的全部用法

    要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字,那就是auto,其实我们通常声明的不用static修饰的变量,都是auto的,因为它是默认的,就象short ...

  8. In-App Purchase Programming Guide----(六) ----Working with Subscriptions

    Working with Subscriptions Apps that use subscriptions have some additional behaviors and considerat ...

  9. ORACLE PL/SQL 实例精解之第二章 通用编程语言基础

    通用编程语言基础 2.1PL/SQL编程基础 1. 字符类型:支持四中类型字符:字母,数字,符号和空格,组合一个或多个字符就会创建一个词汇单元 2. 词汇单元 a.标识符必须以字符开头 b.保留字是p ...

  10. E20180404-hm

    reject vt. 拒绝; 排斥; 抛弃,扔掉; 吐出或呕吐; conditioner  n. 调节器,调节装置 fabric n. 织物; 布; 构造; (建筑物的) 结构(如墙.地面.屋顶):质 ...