【发布时间】:2010-03-10 19:38:18
【问题描述】:
我在 Ubuntu 上使用 python 2.5,并且在同一网络中有一台名为 machine1 的机器。该文件夹已共享。
如何获取该机器特定文件夹中的文件?
我试过了,没有成功:
urllib.urlopen('\\machine1\folder\file.txt')
【问题讨论】:
我在 Ubuntu 上使用 python 2.5,并且在同一网络中有一台名为 machine1 的机器。该文件夹已共享。
如何获取该机器特定文件夹中的文件?
我试过了,没有成功:
urllib.urlopen('\\machine1\folder\file.txt')
【问题讨论】:
Linux 有一个名为 smbmount 的实用程序,我相信它可以在 smbutils 包中找到。
这是一个命令行实用程序,可将 Windows 共享挂载到本地计算机上的目录,可选择使用用户名/密码。
smbmount 是我相信一个以 root 身份运行的实用程序,所以我不知道它是否适合你。也许它可以用作用户。
您可以在 Linux 机器上默认挂载共享,从而将其上的文件作为本地文件访问,或者您可以在 python 脚本中使用 exec 或类似的东西执行 smbmount / smbumount。
mkdir WindowsShare # Do this only once
smbmount \\server\share /home/me/WindowsShare -ousername=...,password=...
ls /home/me/WindowsShare
smbumount /home/me/WindowsShare
用户名和密码可以写入文件以确保安全。检查man page。
如果您需要完全 python 的东西,请查看pysmb。谷歌的术语是 python、smb、CIFS。
【讨论】:
smbclient(不像pysmb,它试图重新实现SMB/CIFS)。
urllib 不理解 SMB 协议。您需要通过 pygobject 使用 gio 才能检索文件。
【讨论】:
如果文件夹是共享的,我觉得应该挂载到~/.gvfs。也许您可以简单地在路径上使用open,就像您在 ~/.gvfs 中看到的那样。
【讨论】:
gvfs-fuse-daemon 正在运行并且 if 共享已安装在当前会话中。您可以通过检查 ~/.gvfs 是否已安装并运行 gvfs-mount 来确保这一点,但为什么不直接使用 GIO?
您应该寻找默认的文件浏览器。
然后您可以执行该过程并传入您想要的文件夹作为参数 (smb://machine1/folder/)。
例如在 windows 上你会这样做:
execl("explorer.exe", "D:")
尝试查找文件浏览器的路径(大部分时间是 Nautilus)。
所以:
execl("/bin/nautilus", "smb://.../")
关于execl的一些信息
【讨论】: