sep examples python symlink

examples - os.system() python



Modificando un enlace simbólico en python (5)

¿Cómo cambio el enlace simbólico para que apunte de un archivo a otro en Python? La función os.symlink () solo parece funcionar para crear nuevos enlaces simbólicos.


Investigué esta pregunta recientemente, y descubrí que la mejor manera es unlink y luego symlink . Pero si solo necesita corregir los enlaces rotos, por ejemplo, con la sustitución automática, puede hacer os.readlink :

for f in os.listdir(dir): path = os.path.join(dir, f) old_link = os.readlink(path) new_link = old_link.replace(before, after) os.unlink(path) os.symlink(new_link, path)


No olvide agregar un comando raise en el caso cuando e.errno! = Errno.EEXIST No desea ocultar un error entonces:

if e.errno == errno.EEXIST: os.remove(link_name) os.symlink(target, link_name) else: raise



Si necesita una modificación atómica, el desvinculación no funcionará.

Una mejor solución sería crear un nuevo enlace simbólico temporal y luego cambiarle el nombre por encima del existente:

os.symlink(target, tmpLink) os.rename(tmpLink, linkName)

Puede verificar que se haya actualizado correctamente también:

if os.path.realpath(linkName) == target: # Symlink was updated

Sin embargo, de acuerdo con la documentación para os.rename, puede que no haya forma de cambiar atómicamente un enlace simbólico en Windows. En ese caso, simplemente eliminarías y volverías a crear.


Una pequeña función que trata de un enlace simbólico y si falla debido a un archivo existente, lo elimina y enlaza nuevamente.

import os, errno def symlink_force(target, link_name): try: os.symlink(target, link_name) except OSError, e: if e.errno == errno.EEXIST: os.remove(link_name) os.symlink(target, link_name) else: raise e