欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python tcl smb_python操作samba

发布时间:2024/7/23 python 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。