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

时间:2019-07-03 19:05:10

标签: 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。

1 个答案:

答案 0 :(得分:2)

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