【问题标题】:Check if file exists in shared network drive检查共享网络驱动器中是否存在文件
【发布时间】:2017-09-09 22:55:32
【问题描述】:

我正在尝试确定共享网络驱动器上是否存在目录。

import os

if(os.path.exists('/Volumes')):
 print 'path exists'
else:
 print 'path does not exist'

这工作正常,但在传递此参数时失败:'/Volumes/A21\ 's\ Public\ Folder'

这对我来说很有意义,因为在我在 Finder 上打开共享驱动器之前它不存在。所以我想我需要先挂载,我首先从命令行尝试过 -

mount_smbfs smb://guest@server/A21's Public Folder

这失败了,所以我不确定应该为 os.path.exists 参数传递什么。理想情况下,我希望能够先挂载到 /Volumes/A21 的公用文件夹,然后再检查该文件夹是否存在?

【问题讨论】:

  • 你到底要安装到什么位置?看来您根本没有安装它...您需要一个安装点。
  • 没错,我之前没有安装。所以我在 if 语句之前添加了这一行 - os.system("osascript -e 'mount volume \"smb://A21._smb._tcp.local/A21\'s\ Public\ Folder\"'") 但是由于不正确的报价标记而失败。我想这将使文件夹可以在 /Volumes 下访问?
  • 你可以把它放在/Volumes下,虽然我更喜欢用户的主目录,因为你知道它有适当的权限;我想你总是可以从/Volumes~/mnt 建立一个符号链接......

标签: python macos mount


【解决方案1】:

Python 中,您将执行与在Bash 中安装共享的基本相同的例程:

#!/usr/bin/python

import os

home = os.path.expanduser("~")
mnt = home + "/mnt"

if not os.path.exists(mnt): os.makedirs(mnt)
os.chdir(mnt)

os.system("mount_smbfs //username@server._smb._tcp.local/share " + mnt)

它的作用是将挂载点设置为用户主目录中的mnt;如果该文件夹不存在,那么它会创建它。然后命令更改到该目录并挂载smb。您需要输入密码,或者如果您想采用一种非常不安全的方式,那么您可以随时在命令中包含密码(例如username:password)。

一旦你的共享被挂载,你可以检查文件是否存在:

os.path.exists(mnt + "/path/to/file")

【讨论】:

  • 我收到一个安装错误,说没有这样的文件或目录:/Users/username/mnt.我至少可以通过 finder 以访客身份正常连接。我还需要指定用户名吗?
  • @A21:是的,“用户名”是您的用户名,因此请用您的帐户替换其中的任何实例。
  • 很遗憾,我只能以访客身份连接到该服务器。
  • @A21:然后将username 替换为guest,它应该仍然以相同的方式工作。
  • 我仍然收到挂载错误:/Users/username/mnt: No such file or directory。我可以通过使用 os.system("osascript -e 'mount volume \"smb://guest@server._smb._tcp.local\"'") 在 /Volumes 中得到这个。
【解决方案2】:

问题可能是您复制和粘贴字符串。我以前遇到过这个问题。在处理文件路径时最好使用 os join 遇到的问题更少

尝试使用:

os.path.join

例如:

import os

pathtodrive = os.path.join("Volumes", "A21's Public Folder")

if (os.path.exists(pathtodrive)):
    print 'path exists'
else:
    print 'path does not exist'

【讨论】:

  • 我试过这个,但没有用。我认为问题在于它甚至无法识别未安装的网络驱动器。
  • 您是否尝试过使用异常来查看它会产生什么错误?
猜你喜欢
  • 2011-04-21
  • 2011-02-14
  • 2015-04-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 2016-02-12
相关资源
最近更新 更多