que iba a tratar el mapeo de la acción a una letra de unidad no utilizada llamando el comando NET USE
usando os.system
(suponiendo que usted está en Windows):
os.system(r"NET USE P: \\ComputerName\ShareName %s /USER:%s\%s" % (password, domain_name, user_name))
Después de que asignó la cuota a una letra de unidad, puede use shutil.copyfile
para copiar el archivo a la unidad especificada. Por último, se debe desmontar la proporción:
os.system(r"NET USE P: /DELETE")
Por supuesto, esto sólo funciona en Windows, y usted tendrá que asegurarse de que la letra de la unidad P está disponible. Puede verificar el código de retorno del comando NET USE
para ver si el montaje tuvo éxito; si no, puede probar una letra de unidad diferente hasta que tenga éxito.
Dado que los dos comandos NET USE
vienen en pares y el segundo siempre se debe ejecutar cuando se ejecutó el primero (incluso si se generó una excepción en el medio), puede ajustar estas dos llamadas en un administrador de contexto si están usando Python 2.5 o posterior:
from contextlib import contextmanager
@contextmanager
def network_share_auth(share, username=None, password=None, drive_letter='P'):
"""Context manager that mounts the given share using the given
username and password to the given drive letter when entering
the context and unmounts it when exiting."""
cmd_parts = ["NET USE %s: %s" % (drive_letter, share)]
if password:
cmd_parts.append(password)
if username:
cmd_parts.append("/USER:%s" % username)
os.system(" ".join(cmd_parts))
try:
yield
finally:
os.system("NET USE %s: /DELETE" % drive_letter)
with network_share_auth(r"\\ComputerName\ShareName", username, password):
shutil.copyfile("foo.txt", r"P:\foo.txt")
Hola, ¿cuál es el argumento del nombre de dominio? – user218976
El argumento de nombre de dominio se puede usar cuando el usuario que se está autenticando está bajo un dominio de autenticación diferente. No lo incluí en la versión contextlib porque simplemente se puede hacer parte del nombre de usuario. Si el usuario que está siendo autenticado está en el mismo dominio que el usuario actual, el dominio puede ser omitido. –
Gracias ... funcionó ... solo que a veces, si lo ejecuto por segunda vez, aparece un error que indica que el dispositivo local está en uso. – user218976