2011-09-13 14 views
14

¿Hay alguna manera de obtener la ruta del directorio de escritorio en una forma multiplataforma, idealmente solo con módulos estándar, en Python?¿Ruta del directorio de escritorio multiplataforma?

Mi solución actual Mac OS X + de Windows es comprobar qué sistema se está ejecutando Python con sys.platform y luego hacer lo siguiente:

  • Mac OS X puede ser manejado con os.path.join(os.path.expanduser('~'), 'Desktop').
  • Windows puede utilizar el módulo no estándar win32com, o el módulo dependiente de los códigos winpaths; ¿hay una alternativa estándar?
  • ¿Y qué hay de Linux?

Estaría encantado con una solución que funciona en Mac OS X, Windows y Linux.

+1

Son sistemas operativos diferentes. La respuesta trivial es casi universalmente "No", no existe un estándar que se aplique a ambas familias de sistemas operativos. Windows no es estándar.¿Estás pidiendo una forma de minimizar las diferencias? Por favor, publique el código que está utilizando para que podamos, tal vez, simplificarlo. –

+1

permítanos [continuar este debate en el chat] (http://chat.stackoverflow.com/rooms/3413/discussion-between-eol-and-s-lott) – EOL

Respuesta

14

Debajo de windows, el hogar de los usuarios es %HOMEPATH% que es el equivalente de Linux y Mac ~. Debajo de esto, hay una carpeta Desktop como en Mac. Python convierte automáticamente ~ en% HOMEPATH% en Windows, por lo que su comando de Mac funcionará de la caja en Mac y Windows.

En Linux, es un poco más complicado. Primero, comprenda que la caja de Linux en la que se está ejecutando no puede tener un escritorio, por lo que no hay una carpeta de escritorio del usuario. Si tiene administrador de ventanas, puede o no seguir el paradigma ~\Desktop. The wikipedia entry on window managers entra en más detalles, incluidas las comparaciones entre varios de los administradores de ventanas X más populares en algunos de los enlaces secundarios.

Su mejor opción sería dar un paso atrás, y pregúntese ¿por qué quiero/necesito la carpeta de escritorio de los usuarios? ¿Es para crear un acceso directo durante la instalación? Probablemente esté mejor con una utilidad de escritor de instalación, como nsis, manejando esos detalles. Si se trata de almacenamiento de archivos, incluso temporal, puede reconsiderar su diseño. ¿O está buscando algo, en cuyo caso una búsqueda de sistema de archivos puede ser el camino a seguir, en lugar de una verificación de carpeta única frágil.

Como la mayoría de las cosas, todo depende de lo que quiera lograr.

Como EOL señaló en su comentario, Windows es un poco más complicado de lo que parece. La carpeta His link to a more complete article on the Windows Desktop tiene más detalles sobre la localización de la carpeta del escritorio. Esto es muy importante para que los constructores de aplicaciones internacionales lo tengan en cuenta, ya sea utilizando la localización automática integrada en su conjunto de herramientas o evitando cosas que lo usan.

+1

Gracias por los comentarios sobre Linux. En cuanto a Windows, a veces pone el escritorio bajo un nombre de directorio localizado (http://bytes.com/topic/python/answers/719464-how-create-file-users-xp-desktop), por lo que parece que el El enfoque de win2com es mejor, ¿no? – EOL

+0

Me interesa la ruta del escritorio porque (1) El usuario ejecuta programas (desde una llave USB) que crean muchos archivos de salida. Estos archivos no deben ir a la llave USB, ya que los usuarios no pueden conservar la llave. (2) Estos archivos de salida también deben hacerse fácilmente "visibles" para el usuario, para que los encuentre fácilmente, de ahí la idea de escritorio. – EOL

+0

@EOL gracias por el enlace, no estaba al tanto de eso. Para el resultado, ¿no sería más sencillo decirle al usuario dónde coloca los archivos y/o abrir una ventana del explorador para mostrar el directorio? Idealmente, deberíamos crear una nueva subcarpeta, para evitar mezclar los nuevos archivos en sus cosas, en caso de que quieran eliminarlas fácilmente. –

17

que utilizó la siguiente:

import os 
desktop_file = os.path.expanduser("~/Desktop/myfile.txt") 

En Unix y Windows, vuelva el argumento con un componente inicial de ~ o ~ usuario reemplazado por el directorio personal del usuario.

Referencia: os.path. expanduser

+0

Esta respuesta realmente devuelve el 'ENTORNO DE LA RUTA POR DEFECTO PYTHON', no funcionó para mí. –

Cuestiones relacionadas