<p>你有几个比赛条件。Pythonic(和系统管理)原则是请求原谅比请求许可更容易。在这种情况下,这意味着最好尝试某个操作并检查其结果,而不是试图猜测该操作是否可能成功。在</p>
<pre><code>import errno
import os
import subprocess
def assert_remote_dir_is_mounted(remote_dir, local_dir):
# Make sure the directory exists.
try:
# Try it first. This avoids race conditions where two processes check
# for its existence at the same time.
os.makedirs(local_dir)
except OSError as exc:
# The "already exists" error is OK. Only report other error conditions.
if exc.errno != errno.EEXIST:
raise
retcode = subprocess.call(["/sbin/mount", "-t", "smbfs", remote_dir, local_dir])
# The call succeeded
if not retcode:
return True
# If it didn't succeed, see if the directory is on a different device
# from its parent. If it is, then the directory was already mounted,
# and hopefully on `remote_dir`. If that's sufficient, then you're done
# here. If you really need to verify that it's mounted on `remote_dir`,
# shell out to `mount` or otherwise check it.
local_parent = os.path.abspath(os.path.join(local_dir, os.pardir))
if os.stat(local_parent).st_dev != os.stat(local_dir).st_dev:
return True
return False
# or raise SomeException("couldn't mount"), etc.
</code></pre>