hb_sz 发表于 2018-8-10 10:00:38

python sftp

第二个例子  
parent, child = os.path.split(s_file)
  
print parent,child
  
/tmp/test/testno testno
  

  
#!/usr/bin/python
  
import pexpect
  
import wparamiko
  
import os
  
import sys
  
import time
  
import multiprocessing
  
import datetime
  
import crash_on_ipy
  
from stat import S_ISDIR
  

  
ip_list = []
  
#room_id = sys.argv
  

  

  
class run_cmd():
  
      def __init__(self,hostname=None,password=None,username=None,port=None,echo_cmd=None):
  
          #threading.Thread.__init__(self)
  
          self.hostname=hostname
  
          self.password=password
  
          self.username=username
  
          self.port=port
  
          self.echo_cmd=echo_cmd
  
          #self.thread_stop=False
  
      def run(self):
  
          wparamiko.util.log_to_file('paramiko.log')
  
          s=wparamiko.SSHClient()
  
          s.set_missing_host_key_policy(wparamiko.AutoAddPolicy())
  
          s.connect(hostname = self.hostname,username=self.username, password=self.password)
  
          stdin,stdout,stderr=s.exec_command(self.echo_cmd)
  
          return stdout.readlines()
  
          s.close()
  
      def stop(self):
  
         self.thread_stop=True
  

  

  
class get_thread():
  
    def __init__(self,hostname,password,username,port=None):
  
   #def __init__(self,hostname,username='root',key_file=None,password=None):
  
   #def __init__(self,hostname=None,password=None,username=None,port=None,local_dir=None,remote_dir=None):
  
      self.hostname = hostname
  
      self.username = username
  
      self.password = password
  
      self.scp = wparamiko.SSHClient()
  
      self.scp.set_missing_host_key_policy(wparamiko.AutoAddPolicy())
  
      self.scp = wparamiko.Transport((hostname, 22))
  
      self.scp.connect(username=username, password=password)
  
      #self.scp.connect(username='tomcat', password='faJxjj/scadmin^o2o&f8com1')
  
      self.sftp = wparamiko.SFTPClient.from_transport(self.scp)
  
    def _walk_remote(self, dirpath):
  
      dirnames = []
  
      filenames = []
  

  
      for fd in self.sftp.listdir_attr(dirpath):
  
            if S_ISDIR(fd.st_mode):
  
                dirnames.append(fd.filename)
  
            else:
  
                filenames.append(fd.filename)
  
      yield dirpath, dirnames, filenames
  

  
      for dirname in dirnames:
  
            new_dirpath = os.path.join(dirpath, dirname)
  
            # yield from self._walk_remote(new_dirpath)
  
            for walk in self._walk_remote(new_dirpath):
  
                yield walk
  

  
    def getall(self,local,remote):
  

  
      st_mode = self.sftp.stat(remote).st_mode
  
      if not S_ISDIR(st_mode):
  
            filename = os.path.basename(remote)
  
            self.sftp.get(remote, os.path.join(local, filename))
  
      else:
  
            parent, child = os.path.split(remote)
  

  
            for dirpath, dirnames, filenames in self._walk_remote(remote):
  
                dirpath = dirpath.replace(parent, '.')
  
                parentc = os.path.join(local,dirpath)
  
                if not os.path.exists(parentc):
  
                  os.makedirs(parentc)
  
                for dirname in dirnames:
  
                  try:
  
                        os.makedirs(os.path.join(local, dirpath, dirname))
  
                  except:
  
                        pass
  

  
                for filename in filenames:
  
                  localpath = os.path.join(local, dirpath, filename)
  
                  remotepath = os.path.join(parent, dirpath, filename)
  
                  self.sftp.get(remotepath, localpath)
  
      self.scp.close()
  
if __name__=='__main__':
  
    port = 22
  
    now = datetime.datetime.now()
  
    strdatetime = now.strftime("%Y-%m-%d")
  
    year=strdatetime.split('-')
  
    mon=strdatetime.split('-')
  
    day=strdatetime.split('-')
  
    Datenow1= year + "/" + mon + "/" + day + "/"
  
    Datenow= year + "/" + mon
  
    print "-"*50
  
    #getthread=get_thread()
  
    #room_pathd = '/opt/src/logs/crm/'
  
    #room_paths = '/home/python/'
  
    f = file('/home/python/filelist','r')
  
    c = f.readlines()
  
    for x in c:
  
      hostname = x.split('::')
  
      password = x.split('::')
  
      username = x.split('::')
  
      local= x.split('::').strip('\n')
  
      remotes = x.split('::').strip('\n')
  
      localz=local + "/" + mon + "/" + day
  
      if remotes.endswith('/'):
  
            remote1 = remotes + Datenow
  
            remote2 = remotes + Datenow1
  
      else:
  
            remote3 = remotes
  
      if not os.path.exists(localz):
  
            remote = remote1
  
            getthread=get_thread(hostname,password,username)
  
            getthread.getall(local,remote)
  
      else:
  
            remote = remote2
  
            echo_cmd='/bin/find %s -maxdepth 1 -type d -mmin -50' % (remote)
  
            cmd_thread=run_cmd(hostname,password,username,port,echo_cmd)
  
            result=cmd_thread.run()
  
            del result
  
            for item in result:
  
                print str(item)
  
                items = item.strip('\n')
  
                getthread=get_thread(hostname,password,username)
  
                getthread.getall(localz,items)
  
                #getthread.getall(localz,'/opt/src/logs/service/o2o-admin/2016/10/28/test')
  

  

  
    f.close()
  
   #getthread.getall(room_paths,room_pathd)
  

  
主要os.path.join搞得头大
页: [1]
查看完整版本: python sftp