I have a similar question like the one asked here but I need it to work on OSX.
How to copy files to network path or drive using Python
So i want to save a file on a SMB network share. Can this be done?
Thanks!
Yes, it can be done. First, mount your SMB network share to the local filesystem by calling a command like this from Python:
mount -t smbfs //user@server/sharename share
(You can do it using the subprocess
module). share
is the name of the directory where the SMB network share will be mounted to, and I guess it has to be writable by the user. After that, you can copy the file using shutil.copyfile
. Finally, you have to un-mount the SMB network share:
umount share
Probably it's the best to create a context manager in Python that takes care of mounting and unmounting:
from contextlib import contextmanager
import os
import shutil
import subprocess
@contextmanager
def mounted(remote_dir, local_dir):
local_dir = os.path.abspath(local_dir)
retcode = subprocess.call(["/sbin/mount", "-t", "smbfs", remote_dir, local_dir])
if retcode != 0:
raise OSError("mount operation failed")
try:
yield
finally:
retcode = subprocess.call(["/sbin/umount", local_dir])
if retcode != 0:
raise OSError("umount operation failed")
with mounted(remote_dir, local_dir):
shutil.copy(file_to_be_copied, local_dir)
The above code snippet is not tested, but it should work in general (apart from syntax errors that I did not notice). Also note that mounted
is very similar to the network_share_auth
context manager I posted in my other answer, so you might as well combine the two by checking what platform you are on using the platform
module and then calling the appropriate commands.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With