2011-12-20 30 views
11

Me gustaría escribir un script de python que cargue cualquier archivo que seleccione en el Explorador de Windows. La idea es seleccionar cualquier archivo en el Explorador de Windows, haga clic con el botón derecho para mostrar el Menú contextual del archivo y seleccione un comando a partir de ahí ... algo así como "Cargar en Servidor Web".Ejecutar el script de Python en el archivo seleccionado

Después de seleccionar el comando, Python ejecuta un script que recibe la ruta del archivo y un nombre de archivo del archivo que se cargará. Escribir el script de Python que cargará el archivo a la web parece ser sencillo. Lo que no está claro es cómo crear una entidad en el menú contextual de Windows para Python Script. Y cómo pasar la ruta del archivo y el nombre del archivo a la secuencia de comandos de Python para atrapar ... ¡Por favor, avise!

Respuesta

21

Asumiendo Windows 7, si abre una carpeta y escribe "shell: sendto" en la barra de direcciones y luego presiona enter, irá al menú contextual. Puede agregar un archivo .cmd con lo siguiente en él.

@echo off 
cls 
python C:\Your\File\uploadscript.py %1 

Esto debería ejecutar su secuencia de comandos python pasando en el archivo (% 1) como parámetro. Dentro del script en Python que puede utilizar:

import sys 
sys.argv #sys.argv[1] is the file to upload 

esto se pone todos los parámetros pasados ​​en la sys.argv[1] debe conseguir que el archivo que fue aprobada en He probado esto y funciona.. La razón por la que necesita el archivo .cmd en lugar de ir directamente a .py es porque el archivo .py no se mostrará en el menú Enviar a.

Más información sobre cómo obtener el archivo en el pasado está aquí:
Accepting File Argument in Python (from Send To context menu)

EDIT: Adición de secuencia de comandos para llamar en varios archivos. Tenga en cuenta que esto llama a la secuencia de comandos python en cada archivo individual, si desea enviar todos los archivos como un parámetro para la secuencia de comandos python, entonces tendrá que trabajar un poco más. Necesita investigar scripts por lotes si desea hacer cosas más avanzadas.

@echo off 
cls 
:upload_loop 
IF "%1"=="" GOTO completed 
    python C:\Your\File\uploadscript.py %1 
    SHIFT 
    GOTO upload_loop 
:completed 
+1

¿Cómo pasaría varios archivos a la vez? Solo puedo hacer pasar uno. –

+0

Agregar un método anterior que funcionará. Si desea hacerlo en una sola llamada a python, tendrá que usar variables, esto podría ser útil: http://en.wikibooks.org/wiki/Windows_Batch_Scripting – Genzume

+0

@TristanForward Probablemente solo use '% *' en lugar de '% 1'. – binki

1

Esta página web Adding Windows context-menu actions tiene un script en Python bonita que registrará un menú contextual para pasar la ruta del archivo de secuencia de comandos de Python. No lo he intentado, pero parece fácil modificar esta muestra a lo que necesita hacer. Además, supongo que es un clic menos que la solución sendTo.

3

En lugar de %1 use %*.

%1 pasará en el primer argumento, %* deja pasar todo (%n pasará en el enésimo ...)

@echo off 
cls 
python C:\Your\File\uploadscript.py %* 

Tenga en cuenta que la línea de comandos ha construido en character limits 2047 para XP y anteriores, 8191 para windows 7 y más tarde

2

para guardar cosas como scripts de python a la derecha del menú contextual del botón, es posible también agregar claves del registro (regedit) en

\HKEY_CLASSES_ROOT\Directory\Background\shell 

Allí, agregue un contenedor, asígnele el nombre de la cadena que desea que aparezca en el menú contextual. En ella, añadir una clave de tipo REG_SZ, que contiene el lanzador de la escritura pitón por ejemplo

C:\Python27\python.exe "C:\path\to\your\script\yourscript.py" 

No sé cómo hacer que el trabajo con la solución aforementionned para obtener múltiples selecciones de archivos en sys.argv, pero pensé que me gustaría mencionar aquí también.

Cuestiones relacionadas