¿Cómo cambio como enlace simbólico para apuntar de un archivo a otro en Python? La función os.symlink() solo parece funcionar para crear nuevos enlaces simbólicos.Modificando un enlace simbólico en python
Respuesta
Puede os.unlink()
primero, y luego volver a crear con os.symlink()
para apuntar al nuevo objetivo.
Investigué esta pregunta recientemente, y descubrí que la mejor manera es de hecho a unlink
y luego a symlink
. Pero si usted necesita sólo para arreglar los enlaces rotos, por ejemplo, con auto-sustitución, entonces usted 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)
Una pequeña función que intenta enlazar simbólicamente y si falla debido a un archivo existente, se lo elimina y enlaces de nuevo.
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
Si necesita una modificación atómica, la desvinculación no funcionará.
Una mejor solución sería la creación de un nuevo enlace simbólico temporal y, a continuación, cambiar su nombre sobre la existente:
os.symlink(target, tmpLink)
os.rename(tmpLink, linkName)
Puede comprobar para asegurarse de que se ha actualizado correctamente también:
if os.path.realpath(linkName) == target:
# Symlink was updated
De acuerdo con la documentación para os.rename embargo, no puede haber manera de cambiar atómicamente un enlace simbólico en Windows. En ese caso, simplemente eliminar y volver a crear.
No se olvide de añadir un comando de aumento en el caso cuando e.errno = errno.EEXIST usted no desea ocultar un error a continuación:
if e.errno == errno.EEXIST:
os.remove(link_name)
os.symlink(target, link_name)
else:
raise
- 1. Copiando un enlace simbólico en Python
- 2. ¿Cómo eliminar un enlace simbólico en python?
- 3. .htaccess o enlace simbólico (enlace simbólico)
- 4. Crear un enlace simbólico relativo en Python sin usar os.chdir()
- 5. Comprobar si el archivo es un enlace simbólico en python
- 6. python: Importación de un archivo que es un enlace simbólico
- 7. android: determinar un enlace simbólico
- 8. ¿Cómo elimino un enlace simbólico?
- 9. enlace gcc contra enlace simbólico
- 10. Detección de un enlace simbólico en Java
- 11. Enlace simbólico a un gancho en git
- 12. Buscar el enlace simbólico
- 13. Enlace simbólico en Windows XP
- 14. Homebrew enlace simbólico error
- 15. ¿Cómo crear un enlace simbólico con SCons?
- 16. Cómo comprobar si existe un enlace simbólico
- 17. ¿Tiene algún efecto secundario la creación de un enlace simbólico a otro enlace simbólico?
- 18. ¿Cómo muevo un enlace simbólico relativo?
- 19. copia de Linux enlace simbólico
- 20. ¿Cómo tratar un enlace simbólico como un directorio en Mercurial?
- 21. Averigüe si un archivo es un enlace simbólico en PowerShell
- 22. Commit enlace simbólico en la subversión
- 23. Cómo hacer un enlace simbólico con cygwin en Windows 7
- 24. ¿Puedo Traverse directorios en Ruby con un enlace simbólico "**" pegote?
- 25. ¿Cómo creo un enlace simbólico en Windows Vista?
- 26. Crear un enlace simbólico del directorio en Ubuntu
- 27. Comprueba si un archivo es real o un enlace simbólico
- 28. Enlace simbólico al archivo más reciente en una carpeta
- 29. no puede sobrescribir enlace simbólico RedHat Linux
- 30. Reemplazar el enlace simbólico importante 'con seguridad'
Python 3.3 tiene 'os.replace' que se puede usar en lugar de 'os.rename' para proporcionar el mismo comportamiento en los sistemas de Posix y Windows. – Tom