2010-01-14 8 views

Respuesta

8

Encontré a slightly different way of doing it. De esta manera, le dará la ubicación de varias carpetas del sistema y usará palabras reales en lugar de CLSID.

import win32com.client 
objShell = win32com.client.Dispatch("WScript.Shell") 
allUserDocs = objShell.SpecialFolders("AllUsersDesktop") 
print allUserDocs 

Otras carpetas disponibles: AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Escritorio, Favoritos, Fuentes, MyDocuments, NetHood, PrintHood, recientes, de enviar a, StartMenu, inicio & plantillas

+0

¿Esta biblioteca está documentada en alguna parte? El sitio de SourceForge es solo un laberinto de publicidades y wikis vacíos. Estoy buscando el directorio de Archivos de programa (o, al menos, así es como solía llamarse en Windows ... afortunadamente no he tenido que lidiar con Windows en mucho tiempo). 'AllUsersPrograms' parece devolver el camino a 'Programas' en el menú Inicio (lo que es interesante, ¡ya que no estoy seguro de haber encontrado siquiera el menú Inicio en Windows Server 2012!) –

+0

@MIchael Scheper Me temo no lo he tocado desde que hice esta pregunta y SourceForge ha ido cuesta abajo desde entonces. Tal vez intente inspeccionar 'objShell' y ver si hay un método para ver todos los nombres' SpecialFolder'. –

+1

Gracias. Lo que he encontrado hasta ahora es http://aspn.activestate.com/ASPN/docs/ActivePython/2.4/pywin32/com.html y, más en general, http://aspn.activestate.com/ASPN/docs/ ActivePython/2.4/pywin32/win32_modules.html, y un comentario que dice 'Pywin32 está tan ligado a las llamadas de win32 que básicamente puedes mirar en MSDN y usar la sintaxis en Python, en su mayor parte'. Todavía no lo he verificado, pero quizás esto ayude a otros SO en el camino correcto. –

4

Para obtener la carpeta "Mis documentos", puede usar:

from win32com.shell import shell 
df = shell.SHGetDesktopFolder() 
pidl = df.ParseDisplayName(0, None, 
    "::{450d8fba-ad25-11d0-98a8-0800361b1103}")[1] 
mydocs = shell.SHGetPathFromIDList(pidl) 
print mydocs 

De here.

No estoy seguro de cuál es el encantamiento mágico equivalente para los "Archivos de programa", pero eso debería ser suficiente para comenzar.

+0

En Python <3, sí. En Python 3.1: >>> cáscara de importación win32com.shell Rastreo (llamada más reciente pasado): Archivo "", línea 1, en de win32com.shell cáscara de importación ImportError: Sin módulo denominado win32com. shell –

+2

¿Está Win32com instalado? Hay versiones disponibles para Python 3.1 (ver http://sourceforge.net/projects/pywin32/files/) –

+0

[Editar] que funciona muy bien, ¡gracias! –

5

en Windows 7 que pueda utilizar las siguientes variables de entorno para acceder a las carpetas que necesito:

>>> import os 
>>> os.environ['USERPROFILE'] 
'C:\\Users\\digginc' 
>>> os.environ['PROGRAMFILES'] 
'C:\\Program Files' 
+0

Estoy en 7 por el momento y esto funciona bien. ¿Sabes qué tan confiable es esto para el uso multiplataforma? La documentación no es de mucha ayuda. Gracias. –

+0

No lo sé, por desgracia, Sr. Chimp, lo siento. – cdiggins

0

La llamada a la API de Windows para hacer esto, desde Vista en adelante, es SHGetKnownFolderPath. Existe un contenedor con licencia MIT (que usa ctypes, por lo que no hay dependencias en pywin32) here.

>>> from knownpaths import * 
>>> get_path(FOLDERID.ProgramFilesX86) 
u'C:\\Program Files (x86)' 
Cuestiones relacionadas