2010-11-18 20 views
50

¿Qué puedo usar para llamar al sistema operativo para abrir una URL en el navegador que el usuario tenga como predeterminado? No me preocupa la compatibilidad entre sistemas operativos; ¡si funciona en linux eso es suficiente para mí!¿Llamar al sistema operativo para abrir la url?

+0

¿que os buscando desde Windows, MacOS y Linux todos tienen una convención de llamada diferente. – koblas

Respuesta

73

Aquí es cómo abrir el navegador predeterminado del usuario con una determinada URL:

import webbrowser 

webbrowser.open(url[, new=0[, autoraise=True]]) 

Aquí está la documentación sobre esta funcionalidad. Es parte de stdlibs de Python:

http://docs.python.org/library/webbrowser.html

He probado esto con éxito en Linux, Ubuntu 10.10.

+2

FWIW también funciona en Windows. – martineau

+1

Lo pruebo en Ubuntu 12.04 y funciona bien también, –

+3

Funciona en Mac. – daviewales

3

Puede usar el módulo webbrowser.

webbrowser.open(url) 
26

Personalmente yo realmente no utilice el módulo webbrowser.

Es un lío complicado de olfatear para determinados navegadores, que no encontrarán el navegador predeterminado del usuario si tienen más de uno instalado, y no encontrarán un navegador si no conocen el nombre (por ejemplo, Chrome).

Mejor en Windows es simplemente usar la función os.startfile, que también funciona en una URL. En OS X, puede usar el comando del sistema open. En Linux hay xdg-open, un comando estándar freedesktop.org soportado por GNOME, KDE y XFCE.

if sys.platform=='win32': 
    os.startfile(url) 
elif sys.platform=='darwin': 
    subprocess.Popen(['open', url]) 
else: 
    try: 
     subprocess.Popen(['xdg-open', url]) 
    except OSError: 
     print 'Please open a browser on: '+url 

Esto proporcionará una mejor experiencia de usuario en plataformas convencionales. Puede recurrir al webbrowser en otras plataformas, tal vez. Aunque lo más probable es que si estás en un sistema operativo oscuro/inusual/incrustado en el que ninguno de los anteriores funciona, las posibilidades son webbrowser también fallarán.

+4

Acabo de consultar la fuente de navegador web, y no estoy seguro de estar de acuerdo con usted. Solo el sniffing de Unix parece poco confiable, e incluso debería funcionar correctamente en KDE o GNOME (probablemente podría usar un parche para usar 'xdg-open', aunque' xdg-open' también usa sniffing similar). La implementación de win32, por ejemplo, ya usa 'os.startfile()', y también tiene un respaldo. –

+0

El módulo webbrowser funcionó para mí cuando tenía Safari como mi navegador predeterminado, y también cuando tenía Chrome como mi navegador predeterminado en Mac. – daviewales

+0

Tenga en cuenta que webbrowser también usa 'xdg-open' ahora. Por lo tanto, esta respuesta está desactualizada en python moderno y no hay ninguna razón para no usar el módulo webbrowser. – Chronial

4

Entonces, ¿cómo trata de mezclar códigos de @kobrien y @bobince arriba:

import subprocess 
import webbrowser 
import sys 

url = 'http://test.com' 
if sys.platform == 'darwin': # in case of OS X 
    subprocess.Popen(['open', url]) 
else: 
    webbrowser.open_new_tab(url) 
Cuestiones relacionadas