2012-01-01 19 views
9

¿Cómo puedo hacer que una secuencia de comandos de Python sea la aplicación predeterminada de un tipo de archivo específico (por ejemplo, * .foo)? Al igual que cuando hago doble clic en el archivo en Finder/Explorer, quiero que el archivo se abra en la secuencia de comandos de Python.¿Abrir el tipo de archivo específico con la secuencia de comandos de Python?

¿Esto es posible en Win y/o OS X? La aplicación es una aplicación PySide si eso es importante.

+0

¿Invocaría un código Java para usted? http: // stackoverflow.com/questions/550329/how-to-open-a-file-with-the-default-associated-program De lo contrario, estoy seguro de que no tiene suerte si quiere una solución portátil. – kay

+0

A partir de esa pregunta, no pude encontrar la manera de abrir el archivo con ninguna aplicación. Ese método '.open' parece solo abrir un archivo en la aplicación predeterminada. Incluso si pudiera, no sería una solución mejor que mi respuesta, ya que necesitaría una aplicación java para abrir el script de Python. – potato

Respuesta

-1
  1. Encuentra cualquier archivo de tipo foo
  2. botón derecho del ratón ->Get Info o Haga clic en el icono del archivo, a continuación, haga clic en Obtener información o haga clic en el archivo y pulsa Comando + I
  3. En el panel
  4. Open With que aparece, seleccione la ruta de acceso a la pitón binaria
  5. Una vez seleccionado, puede hacer clic en el botón change All
  6. Se va a pedir confirmación, sólo decir continue
+0

¿Para qué sistema operativo es esto? – Chris

+0

Chris, Mac OS X. –

+0

¿Hay alguna manera de elegir un archivo * .py en lugar de * .app (que ha venido de py2app o algo así?)? – c00kiemonster

-4

En Windows:

  1. Haga clic derecho en el archivo (utilicé un archivo .docx para este ejemplo)
  2. Seleccionar Open with...
  3. De la lista de aplicaciones, seleccione python
  4. Opcional: Seleccione Always use the selected program to open this kind of file.

Nota: Esto plazo el contenido del archivo .docx en el contexto de la cáscara pitón. Se cerrará inmediatamente una vez que haya terminado de evaluar el contenido del archivo. Si desea editar el archivo en un procesador de texto, tal vez debería descargar notepad++, y seleccionar esa aplicación como la predeterminada.

+4

El OP quiere que un determinado tipo de archivo se abra con _his own python script_, no con python. – ekhumoro

-1

Encontré esta vieja pregunta mientras buscaba una respuesta, y pensé que compartiría mi solución. Usé un programa c simple para dirigir los argumentos a un script de python, lo que permite que el script de python se mantenga como un script en lugar de tener que compilarlo para que todo funcione. Aquí está mi programa c:

int main(int argc, char *argv[]){ 
    char cmd[0xFF]; 
    // For me, argv[1] is the location of the file that is being opened. I'm not sure if this is different on other OSes 
    snprintf(cmd,sizeof cmd,"python YOUR_PYTHON_SCRIPT_HERE.py -a %s", argv[1]); 
    system(cmd); 
    return 0; 
} 

entonces compila el programa C y fije ésta como la aplicación por defecto para la extensión de archivo.
Luego, en el script de python YOUR_PYTHON_SCRIPT_HERE.py, recibo el argumento de la siguiente manera:

import sys 
assert len(sys.argv) > 2 # Breaks if you call the script without the arguments 
theFile = " ".join(sys.argv[2:]) # What the c program gives us 
print(theFile) # Print it out to prove that it works 

thefile contendrá la ubicación del archivo que se está abriendo
obtener el contenido del archivo utilizando:

with open(theFile,"r") as f: 
    fileContents = f.read() 
3

Mac OS X

en Mac OS X puede utilizar Automator para crear una aplicación que llama la aplicación de pitón y pasa el archivo de entrada pat h como un argumento de cadena. En el Asistente de flujo de trabajo de aplicación, agregue la acción "Ejecutar script de shell", seleccione Pass input: como as arguments, y en el cuadro de texto añadir:

python /path/to/my/app/myapp.py "[email protected]" 

Los "[email protected]" pases a lo largo de cualquier argumento se encontraban en la entrada (también conocido como el archivo seleccionado) como instrumentos de cuerda. Siempre que su script esté configurado para tratar con la entrada (sys.argv) como una lista de cadenas (la primera es la ruta de acceso de la aplicación python), entonces funcionará.

Cuando guarda ese flujo de trabajo de Automator, es tratado por OS X como cualquier otra aplicación, y puede configurar esa aplicación como predeterminada para los archivos de tipo "* .foo". Para asociar "* .foo" con esa aplicación, haga clic con el botón derecho en un archivo .foo, Get Info, Open with: Other..., elija la aplicación que creó en Automator y luego haga clic en el botón Change All....

de Windows

Un enfoque similar, pero con suerte menos involucrados podría funcionar en Windows. Probablemente se podría crear un archivo por lotes (.bat) con la siguiente:

python C:\path\to\my\app\myapp.py %* 

El %* se expande a todos los argumentos.

Siempre que pueda asociar una extensión de archivo con ese archivo de proceso por lotes, puede hacerlo, y esa es su solución. Sin embargo, no he probado esta solución de Windows, así que tómela con un grano de sal. La solución de Mac, por otro lado, he probado.

0

Por ejemplo, aquí hay una solución universal que escribí para: 1) abrir un enlace de escritorio de Windows (* .URL) que se ha copiado a una caja de Linux. O 2) abriendo un enlace .Desktop de Linux que se ha copiado en un cuadro de Windows.

Aquí está la secuencia de comandos de Python que maneja ambos casos:

# UseDesktopLink.py 
import sys 
import webbrowser 
script, filename = sys.argv 
file_object = open(filename,'r') 
for line in file_object: 
    if line[0:4]=="URL=": 
     url=line[4:] 
     webbrowser.open_new(url) 
file_object.close() 

En Windows, utilice el método de Scott H (a través de un archivo BAT) para manejar la asociación.

En Linux, haga clic con el botón derecho en un archivo URL de Windows. Elija Propiedades y abra con. Haga clic en Agregar para agregar una nueva aplicación. Luego, en la parte inferior de la ventana "Agregar aplicación", haga clic en "Usar un comando personalizado". Luego busque el archivo UseDesktopLink.py y haga clic en Abrir. Pero antes de hacer clic en Agregar, en el cuadro de texto debajo "Usar un comando personalizado", ponga "python" antes del nombre del archivo (sin las comillas). A continuación, haz clic en Agregar y cerrar.

Espero que ayude.

Cuestiones relacionadas