【发布时间】:2014-09-11 21:58:45
【问题描述】:
在 OSX 中,我有一个已挂载的网络共享,即“/Volumes/tmp”。我想获取共享位置的 url 或服务器主机名。所以想'cifs://10.0.1.103/tmp'或服务器名称。不确定如何在 OSX 中的 Python 2.7 中执行此操作
【问题讨论】:
标签: python macos share mount server-name
在 OSX 中,我有一个已挂载的网络共享,即“/Volumes/tmp”。我想获取共享位置的 url 或服务器主机名。所以想'cifs://10.0.1.103/tmp'或服务器名称。不确定如何在 OSX 中的 Python 2.7 中执行此操作
【问题讨论】:
标签: python macos share mount server-name
我在 SO 上找到了两个建议使用 df 的答案:Get 'unc' path in OSX of mounted share 和 How do I get the server hostname from a mounted directory with cocoa/obj-c?
以下代码是第一个答案的改进版本(我的编辑显然没有被批准):
import subprocess
df = subprocess.Popen(['df', '/Volumes/link/to/some/folder'],
stdout = subprocess.PIPE)
outputLine = df.stdout.readlines()[1]
uncPath = outputLine.split()[0]
print uncPath
注意事项:据我所知,这并没有为您提供协议(“smb”,但可能暗示以两个斜杠开头的路径),我更喜欢不涉及解析的解决方案(这可能用户/服务器/共享名称中的空格失败)。我的预感是可以尝试向 Finder 询问该信息(例如,通过服务,或者可能使用 pyobjc)。
顺便说一句:smb:// 和 cifs:// 似乎是等价的。在 OS X 10.9 中,我可以同时使用 open 命令打开远程共享,并且得到相同的 df 输出和行为。如果你在uncPath 前面加上一个协议以获得完整的URL(或者稍后可以与open 一起使用的东西),这可能会很有趣。另请注意,smb:// 样式的 URL 也应该在 Linux 上工作(在 KDE 和 Gnome 的文件管理器中)。
更新:Linux 上的df 具有 cifs 挂载的行为和输出格式,因此相同的代码也适用于 Linux!
【讨论】: