使用 smb 协议访问服务器上的远程文件 python3
access remote files on server with smb protocol python3
我有一个带有一些文件的远程服务器。
smb://ftpsrv/public/
我可以在那里被授权为匿名用户。在 java 中,我可以简单地编写以下代码:
SmbFile root = new SmbFile(SMB_ROOT);
并获得处理内部文件的能力(这就是我所需要的,一行!),但我在 Python 中找不到如何管理此任务 3,有很多的资源,但我认为它们与我的问题无关,因为它们经常针对 Python 2 和其他旧方法进行定制。有没有一些简单的方法,类似于上面的 Java 代码?
或者有人可以提供一个真正有效的解决方案,例如,如果我想访问 smb://ftpsrv/public/
文件夹中的文件 fgg.txt
。真的有一个方便的库来解决这个问题吗?
现场示例:
import tempfile
from smb.SMBConnection import SMBConnection
# There will be some mechanism to capture userID, password, client_machine_name, server_name and server_ip
# client_machine_name can be an arbitary ASCII string
# server_name should match the remote machine name, or else the connection will be rejected
conn = SMBConnection(userID, password, client_machine_name, server_name, use_ntlm_v2 = True)
assert conn.connect(server_ip, 139)
file_obj = tempfile.NamedTemporaryFile()
file_attributes, filesize = conn.retrieveFile('smbtest', '/rfc1001.txt', file_obj)
# Retrieved file contents are inside file_obj
# Do what you need with the file_obj and then close it
# Note that the file obj is positioned at the end-of-file,
# so you might need to perform a file_obj.seek() if you need
# to read from the beginning
file_obj.close()
我是否真的需要提供所有这些详细信息:conn = SMBConnection(userID, password, client_machine_name, server_name, use_ntlm_v2 = True)
?
Python3中使用urllib和pysmb打开文件的简单例子
import urllib
from smb.SMBHandler import SMBHandler
opener = urllib.request.build_opener(SMBHandler)
fh = opener.open('smb://host/share/file.txt')
data = fh.read()
fh.close()
我还没有准备好用于测试的匿名 SMB 共享,但这段代码应该可以工作。
urllib2 是 python 2 包,在 python 3 中它被重命名为 urllib 并且一些东西被移动了。
我认为您要求的是 Linux,但为了完整起见,我将分享它在 Windows 上的工作原理。
在 Windows 上,Python 的标准库函数似乎开箱即用地支持 Samba 访问:
import glob, os
with open(r'\USER1-PC\Users\Public\test.txt', 'w') as f:
f.write('hello') # write a file on a distant Samba share
for f in glob.glob(r'\USER1-PC\Users\**\*', recursive=True):
print(f) # glob works too
if os.path.isfile(f):
print(os.path.getmtime(f)) # we can get filesystem information
我有一个带有一些文件的远程服务器。
smb://ftpsrv/public/
我可以在那里被授权为匿名用户。在 java 中,我可以简单地编写以下代码:
SmbFile root = new SmbFile(SMB_ROOT);
并获得处理内部文件的能力(这就是我所需要的,一行!),但我在 Python 中找不到如何管理此任务 3,有很多的资源,但我认为它们与我的问题无关,因为它们经常针对 Python 2 和其他旧方法进行定制。有没有一些简单的方法,类似于上面的 Java 代码?
或者有人可以提供一个真正有效的解决方案,例如,如果我想访问 smb://ftpsrv/public/
文件夹中的文件 fgg.txt
。真的有一个方便的库来解决这个问题吗?
现场示例:
import tempfile
from smb.SMBConnection import SMBConnection
# There will be some mechanism to capture userID, password, client_machine_name, server_name and server_ip
# client_machine_name can be an arbitary ASCII string
# server_name should match the remote machine name, or else the connection will be rejected
conn = SMBConnection(userID, password, client_machine_name, server_name, use_ntlm_v2 = True)
assert conn.connect(server_ip, 139)
file_obj = tempfile.NamedTemporaryFile()
file_attributes, filesize = conn.retrieveFile('smbtest', '/rfc1001.txt', file_obj)
# Retrieved file contents are inside file_obj
# Do what you need with the file_obj and then close it
# Note that the file obj is positioned at the end-of-file,
# so you might need to perform a file_obj.seek() if you need
# to read from the beginning
file_obj.close()
我是否真的需要提供所有这些详细信息:conn = SMBConnection(userID, password, client_machine_name, server_name, use_ntlm_v2 = True)
?
Python3中使用urllib和pysmb打开文件的简单例子
import urllib
from smb.SMBHandler import SMBHandler
opener = urllib.request.build_opener(SMBHandler)
fh = opener.open('smb://host/share/file.txt')
data = fh.read()
fh.close()
我还没有准备好用于测试的匿名 SMB 共享,但这段代码应该可以工作。
urllib2 是 python 2 包,在 python 3 中它被重命名为 urllib 并且一些东西被移动了。
我认为您要求的是 Linux,但为了完整起见,我将分享它在 Windows 上的工作原理。
在 Windows 上,Python 的标准库函数似乎开箱即用地支持 Samba 访问:
import glob, os
with open(r'\USER1-PC\Users\Public\test.txt', 'w') as f:
f.write('hello') # write a file on a distant Samba share
for f in glob.glob(r'\USER1-PC\Users\**\*', recursive=True):
print(f) # glob works too
if os.path.isfile(f):
print(os.path.getmtime(f)) # we can get filesystem information