2009-09-18 8 views
10

¿Hay alguna manera sencilla de lanzar el editor predeterminado de sistemas desde una herramienta de línea de comandos de Python, como el módulo webbrowser?Editor predeterminado de Lauch (como el módulo 'webbrowser')

+0

¿Qué tipo de archivo? Para .txt y .py, abrir con la aplicación predeterminada es lo suficientemente bueno. Para otros tipos de archivos, es posible que no obtenga un editor. – u0b34a0f6ae

+0

En mi caso, necesito editar .xml y texto normal (como commit messag en svn). – pkit

Respuesta

13

bajo Windows simplemente puede "ejecutar" el archivo y la acción por defecto será tomada:

os.system('c:/tmp/sample.txt')

Para este ejemplo, un editor por defecto se generan. Bajo Unix hay una variable de entorno llamada EDITOR, por lo que necesita usar algo como:

os.system('%s %s' % (os.getenv('EDITOR'), filename))

+0

Los usuarios de Mac no reciben ningún amor? – Mazyod

+0

¿Y qué ocurre si 'EDITOR' no está configurado? – exhuma

+0

@exhuma si $ EDITOR no está configurado, entonces no tiene * user-set * predeterminado para trabajar. En OS X puede 'subprocess.call ([" abrir, ""]) 'para usar la aplicación predeterminada, como si hubiera usado la GUI. En Linux puede' subprocess.call (["xdg-open", ""]) 'like @ u0b34a0f6ae recommended.' Suprocess' se usa aquí en lugar de 'system' ya que' subprocess' está destinado a reemplazar 'system'. Es más seguro y proporciona métodos como' Popen' que proporcionan una mayor flexibilidad. –

2

Si necesita abrir un archivo para editar, puede interesarle this question.

+0

(esta advertencia también se aplica a mi respuesta) Si el visor y el editor están separados, esto abre el visor en 9 de 10 casos. Llámalo en un archivo HTML y el navegador web lo abrirá para * ver *. – u0b34a0f6ae

+0

Tienes razón, por supuesto :) Tal vez el OP aclare qué tipo de archivo necesita manejar. – Joril

3

La moderna forma de Linux para abrir un archivo está utilizando xdg-open; sin embargo, no garantiza que un editor de texto abra el archivo. Usar $EDITOR es apropiado si su programa está orientado a línea de comandos (y sus usuarios).

1

Puede usar el módulo webbrowser para hacer esto. Todas las respuestas dadas hasta ahora tanto para esto como para la pregunta vinculada son exactamente las mismas cosas que el módulo webbrowser hace detrás del capó.

La ÚNICA diferencia es si tienen $EDITOR conjunto. (que es raro). Así que tal vez un mejor flujo sería:

editor = os.getenv('EDITOR') 
if editor: 
    ps.system(editor + ' ' + filename) 
else: 
    webbrowser.open(filename) 

Ok, ahora que te he dicho que, debo hacerle saber que el módulo de navegador web hace que el estado no soporta este caso, es decir, si él doesn' t trabajo, no envíe un informe de error. Pero para la mayoría de los usos, debería funcionar.

Cuestiones relacionadas