在工作的时候遇到需要通过账号密码访问window平台的samba文件的情况,因为服务器没有开放权限给everyone,头疼。
百度,stackoverflow基本找不到解决方法,或者字太多,哈哈哈。
最后只好深挖范例
按步骤来说,确认你的共享文件的共享路径,以及账号密码,还有权限是否正确打开。
比如下图
那么,在python中,server_name就是你的共享路径的aria2。
初始化
user_name = 'USERNAME'
passwd = 'PASSWD'
ip = '192.168.2.XXX'
service_name='aria2'
dir_name='test'
#test是aria2下面的一个子文件夹
sb=SMBClient(user_name,passwd,ip)#个人封装的一个类,原理一样
sb.connect()
print(sb.status)
print(sb.samba.listShares())
class SMBClient(object):
'''
smb连接客户端
'''
def __init__(self, fname,port=445):
# user_name = 'pc01'
# passwd = '123'
# ip = '192.168.1.XX'
port = None
status = False
samba = None
print('connecting server %s on %s %s'%(ip,service_name,dir_name))
def connect(self):
try:
# user_name = 'pc01'
# passwd = '123'
# ip = '192.168.1.XX'
self.samba = SMBConnection(username, passwd, ip, domain='HOMES',use_ntlm_v2=True,is_direct_tcp=True,remote_name='00')
self.samba.connect(ip, port)
self.status = self.samba.auth_result#连接状态
print('success login server %s'%self.status)
except Exception as e:
print('fail to login server',e)
self.samba.close()
上传一个文件
f=open('E:\\Doc1.docx' ,'rb')
sb.samba.storeFile('aria2','test/tt.doc',f)
f.close()
打开文件
#如果有开启guest查看权限,就不用经过smb类了,太辛苦直接open吧
with open(remote_file_path, 'rb') as f:
temp = f.read()
如果发现共享权限已经开了修改,但是任然报错 unable to open file
并且系统是windows系统,可以查看一下本地权限是否也开了。
如果执行下来没有报错,那么就恭喜成功了。
删除操作
sb.samba.deleteFiles(service_name, ‘test/tt.doc')#delete share file
移动或者重命名
#dir_name是我的一个子文件夹,可以删掉
self.samba.rename
(self.service_name,
os.path.join(self.dir_name,self.fname),
os.path.join(self.dir_name+'/'+new_path,'1111111'+self.fname),
timeout=30)
查了半天官方手册总算搞定了。
附录:关于获取到的文件或文件夹信息,这个obj所包含的属性的用途