使用 python 3.5 的 urllib 上的 SMb 处理程序

Man*_*zza 5 smb urllib python-3.x

我正在尝试从 Windows 共享文件夹中获取一些文件,在 Ubuntu 操作系统上运行 python3.5。由于 urllib2 在 python3 上不可用,我有这个简单的代码:

目录 = 'smb://user:passw@xxx.xxx.x.xx/shared_folder/' 对于符号中的符号:

   path = dir+symbol+'.csv'
   director = urllib.request.build_opener(SMBHandler)
   fh = director.open(path)

   # ..... do some stuff

   fh.close()
Run Code Online (Sandbox Code Playgroud)

符号是当前存在的n个文件的列表。该代码适用于符号中的前 2 个元素,但由于某种原因,在 2 个循环之后我收到此错误

Traceback (most recent call last):
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBHandler.py", line 70, in smb_open
    file_attrs, retrlen = conn.retrieveFile(service, path, fp)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBConnection.py", line 267, in retrieveFile
    return self.retrieveFileFromOffset(service_name, path, file_obj, 0, -1, timeout)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBConnection.py", line 299, in retrieveFileFromOffset
    self._pollForNetBIOSPacket(timeout)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBConnection.py", line 583, in _pollForNetBIOSPacket
    self.feedData(data)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/nmb/base.py", line 54, in feedData
    self._processNMBSessionPacket(self.data_nmb)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/nmb/base.py", line 75, in _processNMBSessionPacket
    self.onNMBSessionMessage(packet.flags, packet.data)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/base.py", line 137, in onNMBSessionMessage
    if self._updateState(self.smb_message):
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/base.py", line 276, in _updateState_SMB2
    req.callback(message, **req.kwargs)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/base.py", line 856, in connectCB
    errback(OperationFailure('Failed to retrieve %s on %s: Unable to connect to shared device' % ( path, service_name ), messages_history))
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBConnection.py", line 293, in eb
    raise failure
smb.smb_structs.OperationFailure: Failed to retrieve AUDNZD30.hst on mt4_history: Unable to connect to shared device
==================== SMB Message 0 ====================
SMB Header:
-----------
Command: 0x03 (SMB2_COM_TREE_CONNECT) 
Status: 0x00000000 
Flags: 0x00 
PID: 8917 
MID: 3 
TID: 0 
Data: 58 bytes 
b'09000000480032005c005c00530048004f0043004b002d00440052004900560045005c006d00740034005f0068006900730074006f0072007900' 
SMB Data Packet (hex):
----------------------
b'fe534d4240000000000000000300000000000000000000000300000000000000d52200000000000075000064004400000000000000000000000000000000000009000000480032005c005c00530048004f0043004b002d00440052004900560045005c006d00740034005f0068006900730074006f0072007900'
==================== SMB Message 1 ====================
SMB Header:
-----------
Command: 0x03 (SMB2_COM_TREE_CONNECT) 
Status: 0xC00000D0 
Flags: 0x01 
PID: 8917 
MID: 3 
TID: 0 
Data: 9 bytes 
b'09000000000000005c' 
SMB Data Packet (hex):
----------------------
b'fe534d4240000000d00000c00300010001000000000000000300000000000000d52200000000000075000064004400000000000000000000000000000000000009000000000000005c'


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/shock/Documents/EclipseWorkspace/HEDA/test.py", line 33, in <module>
    fh = director.open(path)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/urllib/request.py", line 466, in open
    response = self._open(req, data)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/urllib/request.py", line 484, in _open
    '_open', req)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/urllib/request.py", line 444, in _call_chain
    result = func(*args)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBHandler.py", line 81, in smb_open
    raise urllib.error.URLError('smb error: %s' % ex).with_traceback(sys.exc_info()[2])
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBHandler.py", line 70, in smb_open
    file_attrs, retrlen = conn.retrieveFile(service, path, fp)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBConnection.py", line 267, in retrieveFile
    return self.retrieveFileFromOffset(service_name, path, file_obj, 0, -1, timeout)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBConnection.py", line 299, in retrieveFileFromOffset
    self._pollForNetBIOSPacket(timeout)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBConnection.py", line 583, in _pollForNetBIOSPacket
    self.feedData(data)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/nmb/base.py", line 54, in feedData
    self._processNMBSessionPacket(self.data_nmb)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/nmb/base.py", line 75, in _processNMBSessionPacket
    self.onNMBSessionMessage(packet.flags, packet.data)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/base.py", line 137, in onNMBSessionMessage
    if self._updateState(self.smb_message):
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/base.py", line 276, in _updateState_SMB2
    req.callback(message, **req.kwargs)
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/base.py", line 856, in connectCB
    errback(OperationFailure('Failed to retrieve %s on %s: Unable to connect to shared device' % ( path, service_name ), messages_history))
  File "/home/shock/anaconda3/envs/tensorflow/lib/python3.5/site-packages/smb/SMBConnection.py", line 293, in eb
    raise failure
urllib.error.URLError: <urlopen error smb error: Failed to retrieve AUDNZD30.hst on mt4_history: Unable to connect to shared device
Run Code Online (Sandbox Code Playgroud)

==================== SMB 消息 0 ====================

中小企业标头:

命令:0x03 (SMB2_COM_TREE_CONNECT) 状态:0x00000000 标志:0x00 PID:8917 MID:3 TID:0 数据:58 字节 b'09000000480032005c005c00530048004f0043004b002d00440052004 900560045005c006d00740034005f0068006900730074006f0072007900'

SMB 数据包(十六进制):

b'fe534d4240000000000000000300000000000000000000000300000000000000d5220000000000007500006400440000000000000000000000000000000 0000009000000480032005c005c00530048004f0043004b002d00440052004900560045005c006d00740034005f0068006900730074006f0072007900'==== ================ SMB 消息 1 ====================

中小企业标头:

命令:0x03 (SMB2_COM_TREE_CONNECT) 状态:0xC00000D0 标志:0x01 PID:8917 MID:3 TID:0 数据:9 字节 b'09000000000000005c'

SMB 数据包(十六进制):

b'fe534d4240000000d00000c00300010001000000000000000300000000000000d5220000000000007500006400440000000000000000000000000000000 0000009000000000000005c'>