在工作的時(shí)候遇到需要通過(guò)賬號(hào)密碼訪問(wèn)window平臺(tái)的samba文件的情況虎锚,因?yàn)榉?wù)器沒(méi)有開(kāi)放權(quán)限給everyone覆糟,頭疼猛遍。
百度,stackoverflow基本找不到解決方法驰后,或者字太多肆资,哈哈哈。
最后只好深挖范例
按步驟來(lái)說(shuō)灶芝,確認(rèn)你的共享文件的共享路徑郑原,以及賬號(hào)密碼,還有權(quán)限是否正確打開(kāi)夜涕。
比如下圖
那么犯犁,在python中,server_name就是你的共享路徑的aria2女器。
初始化
user_name = 'USERNAME'
passwd = 'PASSWD'
ip = '192.168.2.XXX'
service_name='aria2'
dir_name='test'
#test是aria2下面的一個(gè)子文件夾
sb=SMBClient(user_name,passwd,ip)#個(gè)人封裝的一個(gè)類酸役,原理一樣
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#連接狀態(tài)
print('success login server %s'%self.status)
except Exception as e:
print('fail to login server',e)
self.samba.close()
上傳一個(gè)文件
f=open('E:\\Doc1.docx' ,'rb')
sb.samba.storeFile('aria2','test/tt.doc',f)
f.close()
打開(kāi)文件
#如果有開(kāi)啟guest查看權(quán)限,就不用經(jīng)過(guò)smb類了驾胆,太辛苦直接open吧
with open(remote_file_path, 'rb') as f:
temp = f.read()
如果發(fā)現(xiàn)共享權(quán)限已經(jīng)開(kāi)了修改涣澡,但是任然報(bào)錯(cuò) unable to open file
并且系統(tǒng)是windows系統(tǒng),可以查看一下本地權(quán)限是否也開(kāi)了丧诺。
如果執(zhí)行下來(lái)沒(méi)有報(bào)錯(cuò)入桂,那么就恭喜成功了。
刪除操作
sb.samba.deleteFiles(service_name, ‘test/tt.doc')#delete share file
移動(dòng)或者重命名
#dir_name是我的一個(gè)子文件夾驳阎,可以刪掉
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)
查了半天官方手冊(cè)總算搞定了抗愁。
附錄:關(guān)于獲取到的文件或文件夾信息,這個(gè)obj所包含的屬性的用途