Obtener asociación de archivos en Python

Quiero obtener el progtwig asociado con una extensión, tanto en Linux como en Windows. Sé que puedo ejecutar xdg-open en Linux o iniciar en Windows, pero voy a abrir un archivo de medios en un servidor remoto, por lo que usar este método abriría el navegador web, no el reproductor multimedia predeterminado. ¿Cómo puedo obtener la aplicación predeterminada para una extensión?

Hay un progtwig llamado xdg-mime que es como xdg-open, pero imprime la información en lugar de intentar abrir el archivo.

xdg-mime query filetype /tmp/foobar.png 

Imprime el tipo MIME del archivo /tmp/foobar.png, en este caso image / png

 xdg-mime query default image/png 

Imprime el nombre de archivo .desktop de la aplicación que está registrada para abrir archivos PNG.

En Windows, si no puede encontrar una API, quizás pueda usar assoc o ftype , que son parte de cmd .

Cubriendo Windows solo a continuación:

Creo que estará cerca de lo que acabo de pasar por .doc (asociado con winword.exe).

En mis máquinas …

PASO 1: Eche un vistazo a la clave de registro: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.doc


En Windows XP

PASO 2: Mira el valor predeterminado (ignora todo lo demás allí). El valor predeterminado que estoy viendo es Word.Document.8

PASO 3: Ahora use eso, e insértelo (anótelo en el nombre de clave a continuación), para leer el valor predeterminado de

 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8\shell\Open\command 

Ese valor es: “\” C: \ Archivos de progtwig \ Microsoft Office XP Pro 2003 \ OFFICE11 \ WINWORD.EXE \ “/ n / dde”

Y ese es el camino a MS Word en mi sistema, al menos en XP.

También acabo de notar, acerca de las sugerencias de Mikel arriba, las que están en XP:

 C:\>assoc .doc .doc=Word.Document.8 C:\>ftype Word.Document.8 Word.Document.8="C:\Program Files\Microsoft Office XP Pro 2003\OFFICE11\WINWORD.EXE" /n /dde 

En Windows 7

El valor predeterminado de PASO 1 no tiene ningún conjunto de valores, maldición, ahí estaba la simplicidad. Hay una subclave llamada ‘OpenWithProgIDs’, así que supongo que buscaría eso si el valor predeterminado está vacío o dependiendo de la versión del sistema operativo.

PASO 2: Lea la subclave llamada ‘OpenWithProgIDs’. Hay un elemento llamado Word.Document.8 , por lo que estamos de nuevo en eso ahora.

PASO 3: De nuevo, enchúfelo para leer el valor predeterminado de

 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8\shell\Open\command 

En este caso (el mío) el valor es más complejo:

“C: \ Archivos de progtwig (x86) \ Archivos comunes \ microsoft shared \ virtualization handler \ cvh.exe” “Microsoft Word Starter 2010 9014006604090000” / n “% 1”

En el barrio adecuado, en cuanto a utilizar el registro.

Desafortunadamente en Windows 7, ‘assoc’ y ‘ftype’ no hicieron el truco al menos para .doc y la ruta a winword.exe en mi máquina.