Python 如何访问 Samba 或者 NFS 等网络文件系统?
一直以来,公司都是使用 Java 的 jcifs 来访问和修改 Samba 服务器中的文件资源。
最近有个项目,需要用 Python 去访问 Samba 服务器中的文件资源,我对这方面用得比较少,只找到一个 pysmb,但是 pysmb 官网介绍明确标示这是一个实验性库,生产环境可能会有一些问题。
---- “ pysmb is an experimental SMB/CIFS library ”
那么 Python 访问 Samba 或者 NFS 等网络文件系统,有什么可靠好用的库吗?感谢。
Python 如何访问 Samba 或者 NFS 等网络文件系统?
5 回复
挂载到本机,当本地文件访问。
用Python访问Samba或NFS网络文件系统,主要看你要哪种方式:
Samba访问方案:
- 直接挂载后访问(推荐):先在系统层面挂载Samba共享,然后用Python的普通文件操作
# Linux/macOS挂载示例
sudo mount -t cifs //server/share /mnt/samba -o username=user,password=pass
# Python代码
with open('/mnt/samba/file.txt', 'r') as f:
content = f.read()
- 使用smbprotocol库(纯Python方案):
from smbprotocol.connection import Connection
from smbprotocol.open import Open
from smbprotocol.file_info import FileInfoClass
# 连接Samba服务器
conn = Connection(uuid.uuid4(), "server", 445)
conn.connect()
session = conn.create_session("user", "password")
tree = session.create_tree("share")
# 打开文件
file_open = Open(tree, "file.txt")
file_open.create()
# 读取文件
data = file_open.read(offset=0, length=1024)
NFS访问方案:
- 系统挂载后访问(最稳定):
# 挂载NFS
sudo mount -t nfs server:/export/path /mnt/nfs
# Python直接访问
import os
files = os.listdir('/mnt/nfs')
- 使用nfs-ganesha或rpcbind:需要安装nfs-common,通过subprocess调用系统命令
选择建议:
- 生产环境优先用系统挂载,稳定性和性能最好
- 临时访问或容器环境考虑纯Python库
- 跨平台需求选smbprotocol,Linux专用优先NFS挂载
一句话:系统能挂载就别用库,实在不行再上smbprotocol。
客户端是类 unix 的话,用 pysmbc,是 libsmbclient(samba 自带的库)的 python binding
挂载在本地使用 最好不用其他库
libnfs

