python--做远程scp的进度条

用python写的远程做scp拷贝,并判断拷贝状态,自制进度条在屏幕输出

说明:

其中threading为多线程函数,multiprocessing为多进程函数(本处使用进程)

scp通过pexpect与本机进行交互输入密码(如果配置无密登陆此处可以省略)

通过paramiko获取远程服务器的du -s的值


 

import sys

import os
import threading,multiprocessing
import pexpect
import time,paramiko
def scopy():
ld=pexpect.spawn('scp -r /data/rhel-server-6.3-x86_64-dvd.iso [email protected]:/back/')
ld.expect('password:',timeout=None)
ld.sendline('zhengbin110')
        ld.expect(pexpect.EOF,timeout=None)
#ld.read()
def view_bar(num=1, sum=100, bar_word=":"):
   rate = float(num) / float(sum)
   rate_num = int(rate * 100)
   print '\r%d%% :' %(rate_num),
   for i in range(int(num)/10):
       os.write(1, bar_word)
   sys.stdout.flush()
 
def huoqu():
 host='192.168.2.3'
 user='root'
 passwd='zhengbin110'
 port=22
 try:
  ssh=paramiko.SSHClient()
  ssh.load_system_host_keys()
  ssh.connect(host,port,user,passwd)
 #stdin,stdout,stderr=ssh.exec_command('ls /home')
  stdin,stdout,stderr=ssh.exec_command('du -s /back')
  abc=stdout.readlines()[0].split()[0]
  return abc
 except Exception,e:
  return 0
if __name__=='__main__':
global count,mutex
count=1
t=multiprocessing.Process(target=scopy,args=())
t.start()
while (1):
time.sleep(1)
x=huoqu()
  bili=float(x)/float(os.popen('du -s /data/rhel-server-6.3-x86_64-dvd.iso').readlines()[0].split()[0])*100
view_bar(bili,100,bar_word="#")
if int(bili) == 100:
break
print "COPY IS FINISH!!!!"
t.join()

你可能感兴趣的:(python,pexpect,paramiko,threading,multiprocessing)