python实现从FTP下载文件通过多线程同时分发到多台机器

python非常厉害的一门编程语言,被称之为编程语言中的万能粘合剂,它可以和现有的大部分编程语言来完美对接,今天来为大家说说使用python写一个从ftp上下载文件,然后通过python的多线程模块threading同时分发到多台机器,甚至上百台机器上,多了不说了,直接上代码,代码里会详细讲解每一步的操作。

可根据你的实际情况来修改脚本,实现多线程远程无缝隙操作服务器。


#!/usr/bin/python
#coding: utf-8
#加载我们需要使用到的模块
from ftplib import FTP
import tarfile
import sys
import threading
import paramiko
import os
import datetime
import time
#paramiko 模块需要自己在网上下载下,根据不同的版本来下载
exitFlag = 0
reload(sys)
sys.setdefaultencoding("gbk")

#连接FTP函数
def ftpconnect(host,username,password):
  ftp = FTP()            #实例化FTP模块
  ftp.set_debuglevel(2)  #打开调试模式。等级为2,显示详细信息
  ftp.connect(host,21)   #连接ftp服务器
  ftp.login(username,password) #登录FTP服务器
  
  return ftp  #返回状态

#下载文件
def downlocadfile(ftp,remotepath,localpath):
  bufsize = 1024  #设置缓冲块大小
  fp = open(localpath,‘wb‘)  #以写的模式打开本地文件
  ftp.retrbinary(‘RETR ‘ + remotepath,fp.write,bufsize) #接收服务器上文件并写入本地文件
  ftp.set_debuglevel(0) #关闭调试
  fp.close()  #关闭文件

#上传文件
def uploadfile(ftp,remotepath,localpath):
  bufsize = 1024   #设置缓冲块大小
  fp = open(localpath, ‘rb‘)  #以只读的模式在本地打开文件
  ftp.storbinary(‘STOR ‘ + remotepath, fp, bufsize)  #上传文件
  ftp.set_debuglevel(0)  #关闭调试模式
  fp.close()  #关闭文件

#多线程同时向多台机器发送操作请求的class
class myThread (threading.Thread):   #必须继承父类threading.Thread,
    def __init__(self, hostname, filename):    #self代表的是class本身,hostname和filename是传的参数
        threading.Thread.__init__(self)        #每次调用这个class的时候,都初始化下这两个参数
        self.hostname = hostname               #设置成其他函数也可以调用的属性
        self.filename = filename
    def run(self):                   #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数 
        username=‘‘              #机器的账号
        password=‘‘   #机器的密码
        port=                   #机器的ssh端口
        local_file=‘/home/mf/%s‘ % self.filename    #本地文件
        remote_file=‘/home/mf/%s‘ % self.filename   #你想要将文件传到对方机器的什么路径
        t=paramiko.Transport((self.hostname,port))       #类实例化
        t.connect(username=username,password=password)   #远程连接服务器
        sftp=paramiko.SFTPClient.from_transport(t)       #使用(t)的设置方式连接主机
    #        files=sftp.listdir(dir_path)
        #files=os.listdir(local_dir) 
        #for f in files: 
        print ‘‘
        print ‘#########################################‘
        print ‘Beginning to upload file %s ‘ % datetime.datetime.now()   #打印连接状态及时间
        #print ‘Uploading file:‘,os.path.join(local_dir,f)      
        print ‘Uploading file:‘,local_file
               # sftp.get(os.path.join(dir_path,f),os.path.join(local_path,f)) 
        sftp.put(local_file,remote_file)
    
        print ‘Upload file success %s ‘ % datetime.datetime.now()
        print ‘‘
        print ‘##########################################‘

# 创建新线程

if __name__ == "__main__":
  try:
    remotefile = raw_input(‘输入FTP你要下载的文件:‘).strip()    #输入你要下载的文件名称
    localfile = str(raw_input(‘输入存放在本地的文件名称最好和FTP上的文件名字相同:‘).strip())   #输入你要存在本地后的文件名
    remote_file = remotefile.decode(‘utf8‘,‘ignore‘)    #设置文件字符编码
    ftp = ftpconnect(‘ftp_ip‘,‘ftp_user‘,‘ftp_pwd‘)     #连接FTP
    downlocadfile(ftp,remote_file,"/home/mf/%s" % localfile)   #下载文件到本地
    ftp.quit()   #关闭FTP
     
	#现在将文件使用多线程的方式传输到多台服务器甚至上百上千台服务器上。
	selects = raw_input(‘输入传输文件:‘)   #输入你要传输的文件名称
    #ip_list = []   #ip地址表

	#在这里可以使用循环来实现,由于鄙人时间不足,没时间好好想了,有大神想出来的话,烦请告知谢谢。
	thread1 = myThread(ip[0], selects)  # 创建新线程
	thread1.start()  # 开启线程

  except Exception, e:
  	print e
时间: 2024-10-08 06:42:18

python实现从FTP下载文件通过多线程同时分发到多台机器的相关文章

Python之ftp下载文件测试代码

IT审计中有一个最多的执行步骤就是取证.最近的项目过程中,有需要验证ftp服务机密性的需要,就写了一个ftp访问并下载文件的脚本. 此步骤实现目的有三: 1.ftp是否可以匿名访问到敏感信息. 2.在渗透人员拥有低等.中等技术水平前提下,目标ftp服务器的日志记录.入侵检测等是否会产生记录.阻断及预警功能. 3.也是最重要的,在上述条件下,此举基于可渗透时间.现行部署条件.应对防御未来直接支出代价.数据丢失严重性综合得出判断结论,并据此给出建议. 1 #coding=utf-8 2 import

用Python写一个ftp下载脚本

用Python写一个ftp下载脚本 ----基于Red Hat Enterprise Linux Server release 6.4 (Santiago):python 2.6.6 Ps:少侠我接触Python半个月以来接到的第一个需求,虽然如此简单的一个脚本,少侠我磕磕绊绊却用了将近一天半的时间才写出来,但还是很开心,毕竟也粗来了,废话不多说,切入正题.因为一开始没有用过ftplib模块,所以各种谷歌度娘一堆资料杂乱不堪,话不清,理不乱的,本文实现的功能简单,下面介绍一下,以免误导读者. 需

FTP下载文件工具类

FTP文件下载需要的jar包commons-net-2.0.jar有时还需要:jakarta-oro.jar 1 package com.wdxc.util; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.OutputStream; 7 import java.util.HashMap; 8 import java.util.Ma

c#.net从ftp下载文件到本地

c#.net从ftp下载文件到本地    /*首先从配置文件读取ftp的登录信息*/ string TempFolderPath = System.Configuration.ConfigurationManager.AppSettings["TempFolderPath"].ToString(); string FtpUserName = System.Configuration.ConfigurationManager.AppSettings["FtpUserName&q

AIX 用SHELL脚本 自动FTP下载文件

用SHELL脚本 自动FTP下载文件:kaiboss1:/weblogic/bboss> uname -xAIX kaiboss1 3315381580 3 5 00C59CB54C00kaiboss1:/weblogic/bboss> more ./memberupload/memberupload.shcd /weblogic/bboss/memberupload/fileftp -inv 10.1.140.123 <<!>memberfile.loguser ftp31

C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令

如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的. 出现应用程序未处理的异常:2015/1/6 11:40:56 异常类型:WebException 异常消息:远程服务器返回错误: (500) 语法错误,无法识别命令. 参考:http://www.cnblogs.com/webabcd/archive/2007/01/21/626242.html KeepAlive - 指定连接是应该关闭还是在请求完成之后关闭,默认为true ///

.Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy

系统环境: Windows + .Net Framework 4.0 问题描述: C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的:异常报错的信息:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy 分析过程: 在网上搜索到的解决方案,基本都是将代理置为null:request.Proxy = null; 并没有解释其原因. 调

Python FTP 下载文件 简单示例

简单的FTP下载 ,不加任何异常判断. <span style="font-size:14px;">import os from ftplib import FTP ftp_addr = '10.10.0.1' f=FTP(ftp_addr) f.login('anonymous') f.cwd("apk_download/") remote_file = '20141223140651.apk' f.retrbinary("RETR %s&q

python_ftplib实现通过FTP下载文件

1.  Ftplib常用函数介绍 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,本次主要介绍连接FTP并且进行文件下载功能,可用于自动化部署文件下载,日志文件下载等 1.1  加载ftp模块 from ftplib import FTP或者import ftplib,在函数编写前就需要加载ftp模块 1.2  设置变量 ftp = FTP(),个人觉得类似于析构函数,就是定义变量时需要指定变量为FTP变量 1.3  连接f