python批量上传 服务器_批量从本地上传文件到指定服务器或从指定服务器下载文件...

1.[文件]

FastFTP.py ~ 3KB

下载(20)

#!/usr/bin/env python

#--*-- coding: utf-8 --*--

#author: liangshuang.qi

import os

import sys

import time

import argparse

import paramiko

from multiprocessing import Pool, Manager

User = 'root'

Process_number = 8

Pkey_file = os.path.expanduser('~/.ssh/id_rsa')

Key = paramiko.RSAKey.from_private_key_file(Pkey_file)

def multiFTP(l, s, d, choice) :

try :

host_ip = l.pop()

except IndexError :

sys.exit(1)

try :

t = paramiko.Transport((host_ip, 22))

t.connect(username=User, pkey=Key)

sftp = paramiko.SFTPClient.from_transport(t)

if choice == 'get' :

local_file = os.path.join(s, host_ip+'_'+os.path.split(d)[-1])

sftp.get(d, local_file)

get_size = os.path.getsize(local_file)

return (host_ip, 'Get size %d'%(get_size))

elif choice == 'put' :

sftp.put(s, d)

des_size = int(sftp.stat(d).st_size)

return (host_ip, 'Put size %d'%(des_size))

sftp.close()

except Exception, e :

return (host_ip, '%s exception'%(choice))

def run() :

p=argparse.ArgumentParser(description='这个工具主要用来并发下发文件到设备上,或者从设备上面获取文件')

p.add_argument('-l', '--list', dest='list', type=argparse.FileType('rt'), help='从文件里面读取主机IP')

p.add_argument('--stdout', dest='stdout', default=sys.stdout, type=argparse.FileType('wt'), help='默认正确输出结果到屏蔽,指定参数可以将结果输出到文件')

p.add_argument('--stderr', dest='stderr', default=sys.stderr, type=argparse.FileType('wt'), help='默认错误输出结果到屏幕,指定参数可以将结果输出到文件')

p.add_argument('-s', '--source', dest='src_file', type=str, help='指定源文件地址(当cmd为put时,指定上传文件,当cmd为get时,指定下载目录)')

p.add_argument('-d', '--destination', dest='des_file', type=str, help='指定目的文件地址')

p.add_argument('-c', '--command', dest='cmd', type=str, help='get从服务器下载文件,put上传文件到服务器')

options = p.parse_args()

if options.list :

stdin = options.list

else :

p.print_help()

sys.exit(1)

if options.cmd == 'put' :

if options.des_file :

des_file = options.des_file

else :

sys.exit('上传目的文件名没指定')

cmd = options.cmd

if os.path.exists(options.src_file) :

src_file = options.src_file

else :

sys.exit('上传源文件不存在')

elif options.cmd == 'get' :

if options.des_file :

des_file = options.des_file

else :

sys.exit('下载的目的文件没有指定')

cmd = options.cmd

if os.path.isdir(options.src_file) :

src_file = options.src_file

else :

sys.exit('必须指定一个下载目录')

else :

p.print_help()

sys.exit(1)

hosts_ip = [line.strip() for line in stdin.xreadlines()]

stdin.close()

pool = Pool(processes=Process_number)

manager = Manager()

l = manager.list(hosts_ip)

res_alist = []

for i in range(len(hosts_ip)) :

res_alist.append(pool.apply_async(multiFTP,(l, src_file, des_file, cmd)))

for res in res_alist :

print >> options.stdout,'%s\t\t%s'%(res.get())

def main() :

global hosts_ip

hosts_ip = []

run()

if __name__ == '__main__' :

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值