Pregunta

Tengo una pregunta similar como la que se pidió aquí, pero lo necesito para trabajar en OSX.

Cómo copiar archivos a la ruta de red o unidad usando Python

Así que quiero guardar un archivo en un recurso compartido de red SMB. ¿Es posible hacerlo?

Gracias!

¿Fue útil?

Solución

Sí, se puede hacer. En primer lugar, montar el recurso compartido de red SMB para el sistema de archivos local, llamando a una orden como la de Python:

mount -t smbfs //user@server/sharename share

(Usted puede hacerlo usando el módulo subprocess). share es el nombre del directorio en el recurso compartido de red SMB será montado en, y yo supongo que tiene que ser modificable por el usuario. Después de eso, puede copiar el archivo con shutil.copyfile. Por último, hay que desmontar el recurso compartido de red SMB:

umount share

Probablemente es la mejor para crear un gestor de contexto en Python que se encarga de montar y desmontar:

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)

El código anterior no se ha probado, pero debería funcionar en general (aparte de los errores de sintaxis que no me di cuenta). También tenga en cuenta que mounted es muy similar al gestor de contexto network_share_auth he publicado en mi otra respuesta, por lo que también podría combinar los dos por el control de la plataforma que está sobre el uso del módulo de platform y luego llamar a los comandos apropiados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top