Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Copy files to network path or drive using python on OSX

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!

like image 857
Gumbah Avatar asked Jun 22 '10 06:06

Gumbah


1 Answers

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.

like image 199
Tamás Avatar answered Sep 30 '22 11:09

Tamás