2010-11-18 8 views
50

Cosa posso usare per chiamare il sistema operativo per aprire un URL in qualunque browser l'utente abbia come predefinito? Non è preoccupato per la compatibilità tra i sistemi operativi; se funziona a Linux questo è abbastanza per me!Chiama al sistema operativo per aprire l'url?

+0

quale sistema operativo stai cercando a partire da Windows, MacOS e Linux hanno tutti una diversa convenzione di chiamata. – koblas

risposta

73

Ecco come aprire il browser predefinito dell'utente con un dato url:

import webbrowser 

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

Ecco la documentazione su questa funzionalità. Fa parte del stdlibs di Python:

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

Ho testato questo successo su Linux, Ubuntu 10.10.

+2

FWIW funziona anche su Windows. – martineau

+1

Lo collaudo su Ubuntu 12.04 e funziona anche, –

+3

Funziona su Mac. – daviewales

3

È possibile utilizzare il modulo webbrowser.

webbrowser.open(url) 
26

Personalmente, io davvero non utilizzare il modulo webbrowser.

È un complicato pasticcio di sniffing per determinati browser, che non troverà il browser predefinito dell'utente se ne ha più di uno installato e non troverà un browser se non ne conosce il nome (ad es. Chrome).

Migliore su Windows è semplicemente utilizzare la funzione os.startfile, che funziona anche su un URL. Su OS X, è possibile utilizzare il comando di sistema open. Su Linux c'è xdg-open, un comando standard freedesktop.org supportato da GNOME, KDE e 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 

Ciò consentirà un'esperienza utente migliore sulle piattaforme mainstream. Potresti ricorrere a webbrowser su altre piattaforme, forse. Anche se molto probabilmente se sei su un OS oscuro/insolito/embedded in cui nessuno dei lavori sopra indicati, le probabilità sono webbrowser avranno esito negativo.

+4

Ho appena dato un'occhiata all'origine per il web browser, e non sono sicuro di essere d'accordo con te. Solo l'unix sniffing sembra un po 'inaffidabile, e anche dovrebbe funzionare correttamente in KDE o GNOME (probabilmente potrebbe usare una patch per usare 'xdg-open', anche se' xdg-open' usa comunque lo stesso sniffing). L'implementazione win32, ad esempio, utilizza già 'os.startfile()' e ha anche un fallback. –

+0

Il modulo webbrowser ha funzionato per me quando avevo Safari come browser predefinito e anche quando avevo Chrome come browser predefinito su Mac. – daviewales

+0

Nota che webbrowser usa anche 'xdg-open'. Quindi questa risposta è obsoleta su Python moderno e non c'è motivo per non usare il modulo webbrowser. – Chronial

4

Poi come su mescolare codici di @kobrien e @bobince up:

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)