2010-11-18 25 views
50

Co mogę użyć, aby wywołać system operacyjny w celu otwarcia adresu URL w dowolnej przeglądarce domyślnie używanej przez użytkownika? Nie martwisz się kompatybilnością z różnymi systemami operacyjnymi; jeśli działa w Linuksie, to wystarczy dla mnie!Zadzwoń do systemu operacyjnego, aby otworzyć URL?

+0

Co os szukasz od Windows, MacOS i Linux mają inną konwencję telefonicznej. – koblas

Odpowiedz

73

Oto jak otworzyć domyślną przeglądarkę użytkownika z danego adresu URL:

import webbrowser 

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

Oto dokumentacja o tej funkcjonalności. To część stdlibs Pythona:

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

ja testowałem to z powodzeniem w systemach Linux, Ubuntu 10.10.

+2

FWIW działa również w systemie Windows. – martineau

+1

Testuję go na Ubuntu 12.04 i działa też dobrze, –

+3

Działa na Mac. – daviewales

26

Osobiście naprawdę nie byłby używać modułu webbrowser.

To skomplikowany bałagan dla wąchania określonych przeglądarek, które nie znajdą domyślnej przeglądarki użytkownika, jeśli mają zainstalowaną więcej niż jedną, i nie znajdą przeglądarki, jeśli nie zna jej nazwy (np. Chrome).

Lepsze w systemie Windows jest po prostu użycie funkcji os.startfile, która działa również na adres URL. W systemie OS X można użyć polecenia systemowego open. W systemie Linux jest xdg-open, standardowa komenda freedesktop.org obsługiwana przez GNOME, KDE i 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 

Zapewni to lepszą obsługę użytkowników na popularnych platformach. Możliwe, że możesz wrócić do webbrowser na innych platformach. Chociaż najprawdopodobniej w przypadku mało znanego/nietypowego/wbudowanego systemu operacyjnego, gdzie żadna z powyższych czynności nie zadziała, prawdopodobnie ulegną one również awarii.

+4

Właśnie sprawdziłem źródło dla przeglądarki internetowej i nie jestem pewien, czy się z tobą zgadzam. Tylko wąsy unixowe wyglądają trochę niewiarygodnie, a nawet powinny działać poprawnie w KDE lub GNOME (prawdopodobnie użyłoby to łatki do użycia 'xdg-open', chociaż' xdg-open' i tak używa podobnego sniffingu). Na przykład implementacja win32 używa już 'os.startfile()' i ma również rezerwę. –

+0

Moduł webbrowser pracował dla mnie, gdy Safari był moją domyślną przeglądarką, a także gdy miałem Chrome jako domyślną przeglądarkę na Macu. – daviewales

+0

Zauważ, że przeglądarka internetowa używa teraz 'xdg-open'. Tak więc ta odpowiedź jest nieaktualna na nowoczesnym pythonie i nie ma powodu, aby nie używać modułu przeglądarki. – Chronial

4

Potem jak o mieszanie kodów @kobrien i @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) 
Powiązane problemy