在python脚本中访问共享smb ubuntu
我的网络上有一个共享的ubuntu驱动器,我可以使用nautilus访问它smb://servername/sharedfolder 或smb:///sharedfolder. 我需要能够从我的ubuntu机器(8.10)访问它的python脚本,但我不知道如何访问它。我尝试了显而易见的方法(与鹦鹉螺的地址相同),但没有成功 为了发挥作用,我尝试使用以下两种方法打印该文件夹的内容: 代码: 对于os.listdir(“smb://servername/sharedfolder") 打印文件 两者都在该路径上给我“无文件或目录”错误在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") 打印文件 两者
我非常感谢您在这方面的帮助-谢谢。Python的文件处理函数,如
os.listdir
不像Nautilus那样使用GNOME 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'))