Aufruf an das Betriebssystem, um die URL zu öffnen?

74

Wie kann ich das Betriebssystem aufrufen, um eine URL in einem beliebigen Browser des Benutzers zu öffnen? Keine Sorge um die Kompatibilität zwischen Betriebssystemen; Wenn es unter Linux funktioniert, ist das genug für mich!

Nackenrolle
quelle
Was für ein Betriebssystem suchen Sie, da Windows, MacOS und Linux unterschiedliche Anrufkonventionen haben.
Koblas

Antworten:

117

So öffnen Sie den Standardbrowser des Benutzers mit einer bestimmten URL:

import webbrowser

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

Hier ist die Dokumentation zu dieser Funktionalität. Es ist Teil von Pythons stdlibs:

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

Ich habe dies erfolgreich unter Linux, Ubuntu 10.10 getestet.

Kobrien
quelle
2
Unter OS X 10.8.2 mit Python 2.7.2 scheint dies nicht zu funktionieren. Unter Windows 7 mit Python 2.7.3 funktioniert es jedoch einwandfrei. Funktioniert auch gut unter Ubuntu 12.04 mit XFCE 4.8 und Python 2.7.3.
leetNightshade
Okay, unter OS X 10.8.2 mit Python 2.7.4 scheint dies zu funktionieren. Ärgerlicherweise funktioniert es also wahrscheinlich nur zuverlässig auf neueren Versionen von Python.
leetNightshade
2
Ich bekomme webbrowser.open (url [, new = 0 [, autoraise = True]]) ^ SyntaxError: ungültige Syntax
fatuhoku
Ich verwende OSX 10.8.4 mit Python 2.7.2 und habe überprüft, ob es tatsächlich funktioniert. Wenn Sie jedoch die URL "google.com" verwenden, schlägt dies ohne Fehler fehl. Sie müssen " google.com " angeben .
Josh
1
FWIW, ist es das , was import antigravityverwendet: hg.python.org/cpython/file/tip/Lib/antigravity.py
Sumit
38

Persönlich würde ich das Modul wirklich nicht benutzen webbrowser.

Es ist ein kompliziertes Durcheinander des Schnüffelns für bestimmte Browser, das den Standardbrowser des Benutzers nicht findet, wenn mehr als ein Browser installiert ist, und keinen Browser findet, wenn er den Namen nicht kennt (z. B. Chrome).

Unter Windows ist es einfach, einfach die os.startfileFunktion zu verwenden, die auch für eine URL funktioniert. Unter OS X können Sie den openSystembefehl verwenden. Unter Linux gibt es xdg-openeinen Standardbefehl von freedesktop.org, der von GNOME, KDE und XFCE unterstützt wird.

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

Dies bietet eine bessere Benutzererfahrung auf Mainstream-Plattformen. Sie könnten webbrowservielleicht auf andere Plattformen zurückgreifen . Obwohl es am wahrscheinlichsten ist, wenn Sie sich auf einem obskuren / ungewöhnlichen / eingebetteten Betriebssystem befinden, auf dem keine der oben genannten Funktionen funktioniert, ist die Wahrscheinlichkeit webbrowsergroß, dass auch dies fehlschlägt.

Bobince
quelle
6
Ich habe mir gerade die Quelle für den Webbrowser angesehen und bin mir nicht sicher, ob ich Ihnen zustimme. Nur das Unix-Sniffing sieht etwas unzuverlässig aus, und selbst es sollte in KDE oder GNOME korrekt funktionieren (es könnte wahrscheinlich einen Patch verwenden xdg-open, obwohl es xdg-opensowieso ein ähnliches Sniffing verwendet). Die Win32-Implementierung wird beispielsweise os.startfile()bereits verwendet und hat auch einen Fallback.
Liquid_Fire
1
Das Webbrowser-Modul funktionierte für mich, als ich Safari als Standardbrowser hatte und auch als Chrome als Standardbrowser auf dem Mac.
Daviewales
7
Beachten Sie, dass der Webbrowser xdg-openjetzt auch verwendet. Daher ist diese Antwort auf modernem Python veraltet und es gibt keinen Grund, das Webbrowser-Modul nicht zu verwenden.
Chronial
6

Sie können das Webbrowser- Modul verwenden.

webbrowser.open(url)
Ivo Wetzel
quelle
6

Wie wäre es dann mit dem Mischen der Codes von @kobrien und @bobince:

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)
Kenial
quelle