python操作samba,pythonsamba,最近在部署完xxl-


最近在部署完xxl-job后,陆续将一些日常性执行的python脚本迁移到上面去;其中部分脚本涉及到对samaba的操作,先后尝试了pysmb、fs.smbfs、pysmbclient

pysmb

 安装:sudo pip2 install pysmb
使用

from smb.SMBConnection import *class SMBClient(object):    '''    smb连接客户端    '''    user_name = ''    passwd = ''    ip = ''    prot = None    status = False    samba = None    def __init__(self, user_name, passwd, ip, port=139):        self.user_name = user_name        self.passwd = passwd        self.ip = ip        self.port = port    def connect(self):        try:            self.samba = SMBConnection(self.user_name, self.passwd, '', '', use_ntlm_v2=True)            self.samba.connect(self.ip, self.port)            self.status = self.samba.auth_result        except:            self.samba.close()    def disconnect(self):        if self.status:            self.samba.close()    def all_file_names_in_dir(self, service_name, dir_name):        '''        列出文件夹内所有文件名        :param service_name:        :param dir_name:        :return:        '''        f_names = list()        for e in self.samba.listPath(service_name, dir_name):            if len(e.filename) > 3:                f_names.append(e.filename)        return f_names    def download(self, f_names, service_name, smb_dir, local_dir):        '''        下载文件        :param f_names:文件名        :param service_name:服务名(smb中的文件夹名)        :param smb_dir: smb文件夹        :param local_dir: 本地文件夹        :return:        '''        assert isinstance(f_names, list)        for f_name in f_names:            f = open(os.path.join(local_dir, f_name), 'w')            self.samba.retrieveFile(service_name, os.path.join(smb_dir, f_name), f)            f.close()

优缺点:函数功能丰富,文件下载功能只对普通文件如txt,dat,csv有效,压缩文件无效

fs.smbfs

 安装:sudo pip2 install fs.smbfs
使用

    import fs.smbfs    smb = fs.smbfs.SMBFS(host='****', username='****', passwd='***')    smb.opendir('***')    for e in smb.listdir():        print e    smb.close()

 优缺点:host属性中直接输入ip无效,报错fs.errors.CreateFailed: could not get IP/host pair from ‘*.*.*.193‘,包的作者目前也没有解决这个问题。

pysmbclient

安装:sudo pip2 install pysmbclient
使用:

    import smbclient    smb = smbclient.SambaClient(server='*.*.*.103', username=u'***', password='***', share=u'数据共享/')    for e in smb.listdir(u'/'):        smb.download(os.path.join(u'/', e), os.path.join('~/smb', e))    smb.close()

优缺点:可以完成普通文件和压缩文件从samba下载到本地

python操作samba

评论关闭