python操作samba


最近在部署完xxl-job后,陸續將一些日常性執行的python腳本遷移到上面去;其中部分腳本涉及到對samaba的操作,先后嘗試了pysmbfs.smbfspysmbclient

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下載到本地


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM