python - os.path.isfile() 为 linux smb 网络驱动器上的文件返回 false

标签 python linux network-programming smb file-exists

我的台式机运行的是 Linux Mint 19.1。另一台计算机正在运行 Linux Mint 18.3。两台计算机都运行 Samba。我正在尝试让我的桌面 python 代码检查另一台计算机上的文件。在 Caja 文件管理器中,它显示路径为“smb://lenovo2/kwpvr/”。我可以在 Caja 中复制、删除或重命名文件。

这个问题之前有人问过,但答案只针对其他操作系统 (Windows)。 os.path.isfile() returns false for file on network drive

#!/usr/bin/python3
import os
print(os.path.isfile("smb://lenovo2/kwpvr/kwpvr3.db"))  # False
print (os.path.isfile("//lenovo2/kwpvr/kwpvr3.db"))     # False
print (os.path.isfile("smb:\\lenovo2\kwpvr\kwpvr3.db")) # False
print (os.path.isfile("\\lenovo2\kwpvr\kwpvr3.db"))     # False

print (os.path.exists("smb://lenovo2/kwpvr/kwpvr3.db")) # False
print (os.path.exists("//lenovo2/kwpvr/kwpvr3.db"))     # False
print (os.path.exists("smb:\\lenovo2\kwpvr\kwpvr3.db")) # False
print (os.path.exists("\\lenovo2\kwpvr\kwpvr3.db"))     # False

os.path.exists() 对于我能想到的文件名的任何排列总是返回 False。

最佳答案

os.path 仅适用于可通过本地文件系统访问的文件。它不适用于 smb://https:// 等 URI。

如果你想通过 Linux 上的本地文件系统使网络共享上的文件可用,你必须挂载它们,例如:

mount -t cifs //host/myshare /mnt/mypath

然后使用os.path.exists("/mnt/mypath/hello.txt")

或者,使用 SMB/CIFS API 而不是 os.path

关于python - os.path.isfile() 为 linux smb 网络驱动器上的文件返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56876510/

相关文章:

c - 使用socket进行文件传输和修改

tcp - 如何使用 I/O 完成端口处理重叠 I/O 的部分写入完成

python - 当网络套接字始终准备好读取时如何使用 select?

python - 在调用函数的列表理解中有效地过滤掉 'None' 项

python - 检索 Python 中的命令行参数

linux - 调用 bash 脚本并从另一个 bash 脚本填充输入数据

python - 如何以编程方式停止 multiprocessing.Pool 映射函数

python - 使用图像相似性度量进行图像搜索

linux - 获取由 stdin write 打印的 bash 自动补全

c# - 如何在C#中通过wifi路由器接收数据