在桌面上安装SMB网络共享

时间:2014-12-22 07:27:33

标签: python macos share mount smb

我正在尝试通过python将smb网络共享安装到桌面上,我不希望将共享安装在一个文件夹中,但是所有其他已安装的共享都是(如果我使用'connect to Server', OSX我希望我的python挂载安装在同一位置)。 这是当前的python代码:

directory = os.path.expanduser('~/Desktop')
directory = os.path.normpath(directory)
os.system("mount_smbfs //server/servershare " + directory)

当我运行上述内容时,会发生一些奇怪的事情。在finder中,我的房子,它有一个房子的图标和我的用户名更改为安装名称,它将其搞砸了。

2 个答案:

答案 0 :(得分:2)

如果你想这样做,这就像kosher,类似Finder的方式,通过Python通过shell在AppleScript中完成:

os.system("osascript -e 'mount volume \"smb://server/servershare\"'")

你不需要任何其他东西 - 没有挂载点。这与选择" Connect To Server"相同,生成的卷将按预期显示在/ Volumes中。

如果您需要指定用户名和/或密码,可以这样做:

os.system("osascript -e 'mount volume \"smb://server/servershare\" \
as user name \"myUserName\" with password \"myPassword\"'")

如果您想使用mount_smbfs以原始方式执行此操作,我认为您希望directory成为您在/Volumes中创建的文件夹,例如/Volumes/mySmbVolume,虽然我从未试图这样做过。在您编写完成后,您将使用您正在安装的卷替换实际的桌面文件夹。但是,您可以在Desktop中创建一个文件夹,并将其用于directory,它可能会起作用。但是,我这样做是因为我用通常的Mac做事方式把它写成最标准的。

答案 1 :(得分:0)

如果您还想在桌面上打开一个 Finder 窗口,那么这是另一种解决方案,我自己也使用过。

import os

os.system("open -g smb://Server/Share")
#perform a timeout loop checking for finished attachment
if os.path.exists("/Volumes/Share"):
  # I use a for loop around this to sleep a second and try 20 times.
  # it needs to handle waiting for a server to wake from sleep and then attach
#Do my important functions
os.system("umount /Volumes/Share")

优点是:

  1. 使用当前用户的钥匙串凭据
  2. 将唤醒睡眠中的 Mac 以附加到 smb 共享
  3. 会自动创建/删除/Volumes中的附件目录
  4. (对于其他人)这可以在 shell 脚本中同样有效

缺点是:

  1. 它使用 Finder,因此会在您的桌面上打开一个包含该位置的窗口。如果您不弄乱窗口,它会在您umount
  2. 时自行关闭
  3. 它在连接网络之前返回,因此您需要代码来检查已安装的卷、睡眠,并最终前进或出错。
  4. 重复 1:如果您尝试在后台运行而其他人在控制台,那么弹出 Finder 窗口真的很糟糕。您可以使用 -g 将窗口留在桌面上的其他窗口后面,但如果您想隐藏在后台运行,则首选 Ivan X 的解决方案。

另一方面,如果您想要一个新的 Finder 窗口,那么这很有效。