在python脚本中访问共享smb ubuntu

在python脚本中访问共享smb ubuntu,python,ubuntu,django-forms,samba,Python,Ubuntu,Django Forms,Samba,我的网络上有一个共享的ubuntu驱动器,我可以使用nautilus访问它smb://servername/sharedfolder 或smb:///sharedfolder. 我需要能够从我的ubuntu机器(8.10)访问它的python脚本,但我不知道如何访问它。我尝试了显而易见的方法(与鹦鹉螺的地址相同),但没有成功 为了发挥作用,我尝试使用以下两种方法打印该文件夹的内容: 代码: 对于os.listdir(“smb://servername/sharedfolder") 打印文件 两者

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

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

为了发挥作用,我尝试使用以下两种方法打印该文件夹的内容:

代码: 对于os.listdir(“smb://servername/sharedfolder") 打印文件 两者都在该路径上给我“无文件或目录”错误


我非常感谢您在这方面的帮助-谢谢。

Python的文件处理函数,如
os.listdir
不像Nautilus那样使用GNOME URL,它们使用文件名。这不是一回事

这里有三个基本选项:

  • 让GNOME为您查找URL,就像鹦鹉螺一样
  • 选择一个PythonSMB客户端并使用它。有
  • 使用SMB文件系统插件,比如将远程文件系统装载到装载点,这样您就可以通过路径名而不是URL访问其文件

  • Python只能处理本地路径。 Samba是由Linux系统中的驱动程序或应用程序读取的远程路径,除非您使用自定义库,否则无法直接从Python访问

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

    同样,使用
    shell=True
    是危险的,它应该是
    False
    ,并且您应该将命令字符串作为列表传递。但是由于某些原因,如果你按照你应该的方式使用它,它看起来“复杂”,所以我会给你写这个警告,你可以选择遵循通用的指导原则,或者只是使用它来尝试功能


    。遵循此操作,并用自动编程取代手动步骤。

    smb
    是samba驱动程序采用的协议。这不是任何其他应用程序都可以访问的通用路径。Linux所做的是通过允许您访问的驱动程序将远程SMB文件夹装载到本地文件夹。装载它,或者找到支持samba的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'))