在桌面上挂载SMB网络共享

3

我正在尝试通过Python将SMB网络共享挂载到桌面,我不希望该共享被挂载到文件夹中,而是希望它被挂载在所有其他已挂载共享所在的位置(如果我在OSX中使用“连接到服务器”,则希望我的Python挂载位于相同位置)。以下是当前的Python代码:

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

当我运行以上代码时,出现了一些奇怪的情况。在Finder中,我的主目录,它原本有一个房子的图标和我的用户名,现在变成了挂载点的名称,有些混乱。

我已经更新了原始问题。 - speedyrazor
你期望发生什么?你已经挂载了一个网络共享到你的主目录,所以我觉得发生的情况是正确的。 - Droppy
我想要的是它能够像在OSX中使用“连接到服务器”时一样挂载共享,我希望我的Python挂载能够在与这些共享相同的位置挂载。有没有什么办法可以做到这一点? - speedyrazor
2个回答

5

如果您想以类似Finder的方式执行此操作,可以通过Shell通过Python在AppleScript中完成:

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

您不需要其他任何东西——也没有挂载点。这与选择“连接到服务器”相同,生成的卷将按预期显示在 /Volumes 中。

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

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

如果您想使用mount_smbfs按照原始方式操作,我认为您希望directory是您在/Volumes中创建的文件夹,例如/Volumes/mySmbVolume,尽管我从未尝试过这种方式。按照您编写的方式,您将替换实际的桌面文件夹与您正在挂载的卷。您可以在桌面内创建一个文件夹并将其用作directory,这可能会起作用。但是,为了符合通常的Mac操作方式,我建议按照我编写的方式进行操作。

完美的答案,非常详细,直接回答了问题。 - speedyrazor
如果服务器需要密码而您没有在脚本中输入密码,似乎当在系统提示中输入密码并勾选“在钥匙串中记住”时,OS X 不会记住密码。您有任何想法如何解决这个问题吗? - ebi
@ebi 很抱歉我不知道,但是我会尝试在钥匙串中删除相关条目,然后再次尝试。如果这样还不行,可以手动挂载并保存到钥匙串中,然后再手动重复操作;如果这样可行,那么再尝试运行脚本。 - Ivan X

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,因此会在桌面上打开一个窗口显示位置。如果您不操作该窗口,则在卸载时它将自动关闭。
  2. 它在网络连接之前返回,因此您需要编写代码来检查已挂载的卷、休眠并最终向前移动或出现错误。
  3. 重复 1:如果您尝试在后台运行且其他人正在控制台上,则弹出 Finder 窗口真的很糟糕。您可以使用 -g 将窗口留在桌面上的其他窗口后面,但是如果您想在后台隐藏运行,则 Ivan X 的解决方案更可取。

另一方面,如果您想要一个新的 Finder 窗口,则这个方法效果很好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接