在 python 脚本中访问共享的 smb ubuntu

Mur*_*mal 5 python ubuntu samba django-forms

我的网络上有一个共享的 ubuntu 驱动器,我可以在 nautilus 中使用 smb://servername/sharedfolder 或 smb:///sharedfolder 访问它。

我需要能够从我的 ubuntu 机器(8.10)访问它的 python 脚本,但我不知道如何。我尝试了显而易见的方法(与 nautilus 相同的地址),但没有成功。

为了玩耍,我尝试使用以下两种方式打印该文件夹的内容:

代码:for file in os.listdir("smb://servername/sharedfolder") 打印文件两者都在该路径上给我“没有文件或目录”错误。

我真的很感激这方面的帮助 - 谢谢。

Tor*_*xed 6

Python 只能处理本地路径。Samba 是 Linux 系统中的驱动程序或应用程序读取的远程路径,并且不能直接从 Python 访问,除非您使用像此实验库这样的自定义库。

您可以执行类似的操作(确保您的用户具有安装内容所需的权限):

import os
from subprocess import Popen, PIPE, STDOUT

# Note: Try with shell=True should not be used, but it increases readability to new users from my years of teaching people Python.
process = Popen('mkdir ~/mnt && mount -t cifs //myserver_ip_address/myshare ~/mnt -o username=samb_user,noexec', shell=True, stdout=PIPE, stderr=PIPE)
while process.poll() is None:
    print(process.stdout.readline()) # For debugging purposes, in case it asks for password or anything.

print(os.listdir('~/mnt'))
Run Code Online (Sandbox Code Playgroud)

再说一次,使用shell=True是危险的,它应该是危险的,False你应该将命令字符串作为列表传递。但由于某种原因,如果您按照预期的方式使用它,它会显得“复杂”,所以我会给您写这个警告,您可以选择遵循通用准则,或者只是使用它来尝试该功能。

这是有关如何手动安装 samba 的完整指南。遵循这一点,用自动化编程代替手动步骤。


aba*_*ert 2

Python 的文件处理函数不像os.listdirNautilus 那样采用 GNOME URL,而是采用文件名。这些不是同一件事。

您在这里有三个基本选项:

  1. 让 GNOME 为您查找 URL,就像 Nautilus 那样。
  2. 选择一个 Python SMB 客户端并使用它。有多种选项可供选择
  3. 使用CIFS VFS等 SMB 文件系统插件将远程文件系统安装到安装点,以便您可以通过路径名而不是 URL 访问其文件。