Página 1 de 1

[Resuelto] Mover acceso directo del escritorio

Publicado: 22 de noviembre de 2015 - 8:43 a. m.
por gaelds
Buen día,

Después de instalar Stellarium, me gustaría mover el acceso directo predeterminado del escritorio a una subcarpeta (tras verificar que ya existe). Desafortunadamente, al ejecutar el comando build-upload, recibo los siguientes mensajes: ERROR FATAL: IOError: [Errno 2] No existe el archivo o directorio...

Aquí está el extracto del código:

Código: Seleccionar todo

if isdir("c:\Users\Public\Desktop\Logiciels\Physique-Chimie\""):
    if isfile("c:\Users\Public\Desktop\Stellarium.lnk"):
        print ('Déplacement du raccourci Stellarium')
        shutil.move("c:\Users\Public\Desktop\Stellarium.lnk","c:\Users\Public\Desktop\Logiciels\Physique-Chimie\Stellarium.lnk")
La carga de compilación funciona si creo el archivo c:\Users\Public\Desktop\Logiciels\Physique-Chimie\Stellarium.lnk en mi PC, pero ¿se puede evitar este tipo de error modificando el código?

Re: Mover acceso directo del escritorio

Publicado: 22 de noviembre de 2015 - 09:35
por gaelds
Otro problema es que el acceso directo no se mueve al probar el paquete. ¿Hay algún error en el código? Intenté añadir una pausa de 30 segundos con `time.sleep(30)` antes de empezar a moverlo, pero tampoco funcionó.

Re: Mover acceso directo del escritorio

Publicado: 23 de noviembre de 2015 - 09:07
por htouvet
Agregue caracteres "r" (cadena sin formato) para que Python no interprete el \

Código: Seleccionar todo

if isdir(r"c:\Users\Public\Desktop\Logiciels\Physique-Chimie"):
    if isfile(r"c:\Users\Public\Desktop\Stellarium.lnk"):
        print (u'Déplacement du raccourci Stellarium')
        shutil.move(r"c:\Users\Public\Desktop\Stellarium.lnk",r"c:\Users\Public\Desktop\Logiciels\Physique-Chimie\Stellarium.lnk")
Para mejorar la portabilidad,

Código: Seleccionar todo

if isdir(makepath(common_desktop(),'Logiciels','Physique-Chimie')) and isfile(common_desktop(),'Stellarium.lnk'):
        print(u'Déplacement du raccourci Stellarium')
        shutil.move(makepath(common_desktop(),'Stellarium.lnk'),makepath(common_desktop(),'Logiciels','Physique-Chimie','Stellarium.lnk'))

Re: Mover acceso directo del escritorio

Publicado: 23 de noviembre de 2015 - 09:23
por gaelds
¡Muchas gracias! Lo probaré pronto. ¿El segundo código también debería funcionar en XP?

Re: Mover acceso directo del escritorio

Publicado: 23 de noviembre de 2015 - 11:30 a. m.
por gaelds
Lo siento, parece que no funciona; el acceso directo permanece en el escritorio. ¿Podría ser que el usuario (estudiante) no tenga permisos de escritura en la carpeta de accesos directos la causa del siguiente error?
Imagen

Re: Mover acceso directo del escritorio

Publicado: 23 de noviembre de 2015 - 12:09 p. m.
por htouvet
El procedimiento `install ext` se ejecutó con la cuenta del sistema. Por lo tanto, no hay problemas de permisos.
La función `shutil.move` asume que el destino no existe.

Así que, debes comprobar que el archivo de destino no existe (`isfile`).
Además, comprueba que la carpeta existe; si no, créala (`mkdirs`).

Re: Mover acceso directo del escritorio

Publicado: 23 de noviembre de 2015 - 12:39
por gaelds
Por fin lo conseguí; el comando `makepath` faltaba en `isfile`. A continuación se muestra el código que funciona en Windows 7 (no probado en XP). No sé si la desinstalación es necesaria..

Código: Seleccionar todo

if iswin64():
 uninstallkey = ["Stellarium_is1"]
 print ("Fermeture de Stellarium")
 killalltasks('Stellarium.exe')
 print('installation de dst-stellarium 64bits')
 run(r'"stellarium-0.14.0-win64.exe" /VERYSILENT')
 print ("Pause de 15sec.")
 time.sleep(15)
 if isdir(makepath(common_desktop(),'Logiciels','Physique-Chimie')) and isfile(makepath(common_desktop(),'Stellarium.lnk')):
    print(u'Déplacement du raccourci Stellarium')
    shutil.move(makepath(common_desktop(),'Stellarium.lnk'),makepath(common_desktop(),'Logiciels','Physique-Chimie','Stellarium.lnk'))
else:
 uninstallkey = ["Stellarium_is1"]
 print ("Fermeture de Stellarium")
 killalltasks('Stellarium.exe')
 print('Installation de dst-stellarium 32bits')
 run(r'"stellarium-0.14.0-win32.exe" /VERYSILENT')
 print ("Pause de 15sec.")
 time.sleep(15)
 if isdir(makepath(common_desktop(),'Logiciels','Physique-Chimie')) and isfile(common_desktop(),'Stellarium.lnk'):
    print(u'Déplacement du raccourci Stellarium')
    shutil.move(makepath(common_desktop(),'Stellarium.lnk'),makepath(common_desktop(),'Logiciels','Physique-Chimie','Stellarium.lnk'))

def uninstall():
 killalltasks('Stellarium.exe')
 print ("Désinstallation de Stellarium")
 if isfile(makepath(common_desktop(),'Logiciels','Physique-Chimie','Stellarium.lnk')):
  remove_file(makepath(common_desktop(),'Logiciels','Physique-Chimie','Stellarium.lnk'))
 if isfile(makepath(common_desktop(),'Stellarium.lnk')):
  remove_file(makepath(common_desktop(),'Stellarium.lnk'))
 return (0);
¡Gracias por su ayuda!