2011-11-01 12 views
6

Estoy tratando de encontrar la manera de hacer un programa Python abrir un archivo cuando un usuario hace clic derecho sobre el archivo y selecciona "Abrir con". Por ejemplo, quiero que un usuario pueda hacer clic derecho en un archivo de texto y seleccionar mi programa para que mi programa pueda procesar el archivo de texto. ¿El nombre del archivo de texto pasó a mi programa de alguna manera? Gracias."Abrir con ..." un archivo en Windows, con una aplicación de pitón

Respuesta

3

El problema con este enfoque es que el archivo .py no es un archivo ejecutable; Windows pasará el archivo de texto como parámetro al archivo .py, pero el archivo .py en sí no hará nada, ya que no es un archivo ejecutable.

Lo que puede hacer es compilar su secuencia de comandos con py2exe para obtener un ejecutable real, que puede especificar en la pantalla "Abrir con ..." (incluso puede registrarlo como predeterminado para cualquier archivo * .foo) La ruta al archivo .foo que se pasa debe ser sys.argv[1] en su secuencia de comandos.

+0

py2exe es una exageración, ya que hace un programa para un EXE independiente que no requiere pitón en absoluto y que necesita volver a compilar cada vez el programa se cambia (en caso de que lo desarrolles). Hay contenedores de exe en% python% \ Scripts \ que acaban de iniciar un script de python con el mismo nombre. Alguien sabe algo al respecto? –

0

Primero tendrá que registrar su secuencia de comandos para ejecutar con Python en ProgId en el registro. Como mínimo, necesitará el verbo abierta definido:.

HKEY_CURRENT_USER\Software\Classes\MyApp.ext\ 
    (Default) = "Friendly Name" 
    DefaultIcon\ 
    (Default) = "path to .ico file" 
    shell\ 
    open\ 
     command\ 
     (Default) = 'path\python.exe "path\to\your\script.py" "%L"' 

Puede sustituir HKEY_LOCAL_MACHINE si está instalando en todo el equipo * También hay convenciones de versiones de que es probable que pueda ignorar. La sección de MSDN en File Types tiene información más detallada.

El segundo paso consiste en añadir su ProgId a los OpenWithProdIds clave de la extensión que desea que aparezca en la lista para:

HKEY_CURRENT_USER\Software\Classes\.ext\OpenWithProgIds 
    MyApp.ext = None 

El valor de la clave no importa, siempre y cuando la nombre coincide exactamente con su ProgId.


* Tenga en cuenta que HKEY_CLASSES_ROOT es en realidad una llave falsa que 'contiene' una unión de ambos HKLM\Software\Classes y HKCU\Software\Classes; si escribe en el registro, debe elegir una de las claves reales. No necesita elevar para instalar en HKEY_CURRENT_USER.

+0

Declararé que no lo he intentado, ya que no quiero complicar particularmente mi configuración en esta máquina. MSDN sugiere que se deben establecer algunos otros valores, pero un vistazo rápido a mi registro indica que no son necesarios. Definitivamente interesado si esta solución mínima funciona; ve y edita cualquier fragmento extra que me haya perdido. – Zooba

+0

Esto simplemente no funciona; al seleccionar el .py en el menú 'abrir con' aún se informa que no es una aplicación win32. –

0

Mi enfoque es utilizar un archivo .bat de redirección que contiene python someprogram.py %1. El %1 pasa la ruta del archivo en el script en Python que se puede acceder con
from sys import argv argv[1]

Cuestiones relacionadas