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访问方案:

  1. 直接挂载后访问(推荐):先在系统层面挂载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()
  1. 使用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访问方案:

  1. 系统挂载后访问(最稳定):
# 挂载NFS
sudo mount -t nfs server:/export/path /mnt/nfs
# Python直接访问
import os
files = os.listdir('/mnt/nfs')
  1. 使用nfs-ganesha或rpcbind:需要安装nfs-common,通过subprocess调用系统命令

选择建议:

  • 生产环境优先用系统挂载,稳定性和性能最好
  • 临时访问或容器环境考虑纯Python库
  • 跨平台需求选smbprotocol,Linux专用优先NFS挂载

一句话:系统能挂载就别用库,实在不行再上smbprotocol。

客户端是类 unix 的话,用 pysmbc,是 libsmbclient(samba 自带的库)的 python binding

挂载在本地使用 最好不用其他库

回到顶部