python tcl smb_python操作samba
最近在部署完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 tcl smb_python操作samba的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php表单提交邮箱_最全实现dede订单
- 下一篇: linux 状态码的意义,HTTP状态码