【问题标题】:Open Windows shared folder through linux machine通过linux机器打开windows共享文件夹
【发布时间】:2010-03-10 19:38:18
【问题描述】:

我在 Ubuntu 上使用 python 2.5,并且在同一网络中有一台名为 machine1 的机器。该文件夹已共享。

如何获取该机器特定文件夹中的文件?

我试过了,没有成功:

urllib.urlopen('\\machine1\folder\file.txt')

【问题讨论】:

    标签: python urllib


    【解决方案1】:

    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。

    【讨论】:

    • 谢谢,我手头有这个解决方案。但我想在最后一种情况下使用它。不过还是谢谢。在最后一种情况下,我将在 Windows (IIS) 上安装 Web 服务。 :(
    • 还有pypi.python.org/pypi/PySmbClient,它在下面使用smbclient(不像pysmb,它试图重新实现SMB/CIFS)。
    【解决方案2】:

    urllib 不理解 SMB 协议。您需要通过 pygobject 使用 gio 才能检索文件。

    【讨论】:

      【解决方案3】:

      如果文件夹是共享的,我觉得应该挂载到~/.gvfs。也许您可以简单地在路径上使用open,就像您在 ~/.gvfs 中看到的那样。

      【讨论】:

      • If gvfs-fuse-daemon 正在运行并且 if 共享已安装在当前会话中。您可以通过检查 ~/.gvfs 是否已安装并运行 gvfs-mount 来确保这一点,但为什么不直接使用 GIO?
      【解决方案4】:

      您应该寻找默认的文件浏览器。

      然后您可以执行该过程并传入您想要的文件夹作为参数 (smb://machine1/folder/)。

      例如在 windows 上你会这样做:

      execl("explorer.exe", "D:")
      

      尝试查找文件浏览器的路径(大部分时间是 Nautilus)。

      所以:

      execl("/bin/nautilus", "smb://.../")
      

      关于execl的一些信息

      【讨论】:

      • 好的,但是……我想我解释得不是很清楚。我的 python 脚本在 Ubuntu 上运行,我只想获取一个文件。并且这台窗口机器中没有任何服务。
      • 请使用您的更新来更新您的问题。您特别想打开一个文件?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多