1 #!/usr/bin/env python 2 3 "Simple desktop integration for Python." 4 5 import os 6 import sys 7 import subprocess 8 9 def open(url, desktop=None): 10 11 """ 12 Open the 'url' in the current desktop's preferred file browser. If the 13 optional 'desktop' parameter is specified then attempt to use that 14 particular desktop environment's mechanisms to open the 'url' instead of 15 guessing or detecting which environment is being used. 16 17 Suggested values for 'desktop' are "KDE", "GNOME", "Mac OS X" and "generic", 18 where "generic" uses an OPENER environment variable to open the specified 19 'url'. 20 21 The process identifier of the "opener" (ie. viewer, editor, browser or 22 program) associated with the 'url' is returned by this function. If the 23 process identifier cannot be determined, None is returned. 24 """ 25 26 if desktop == "generic" or \ 27 desktop is None and os.environ.has_key("OPENER"): 28 29 try: 30 # NOTE: This may not handle sophisticated commands properly. 31 cmd = os.environ["OPENER"].split() 32 cmd.append(url) 33 except KeyError, exc: 34 raise OSError, "Desktop not supported (OPENER could not be used)" 35 36 elif desktop == "KDE" or \ 37 desktop is None and (os.environ.has_key("KDE_FULL_SESSION") or 38 os.environ.has_key("KDE_MULTIHEAD")): 39 40 cmd = ["kfmclient", "exec", url] 41 42 elif desktop == "GNOME" or \ 43 desktop is None and (os.environ.has_key("GNOME_DESKTOP_SESSION_ID") or 44 os.environ.has_key("GNOME_KEYRING_SOCKET")): 45 46 cmd = ["gnome-open", url] 47 48 elif desktop == "Mac OS X" or \ 49 desktop is None and sys.platform == "darwin": 50 51 cmd = ["open", url] 52 53 else: 54 try: 55 # NOTE: This returns None in current implementations. 56 return os.startfile(url) 57 except AttributeError, exc: 58 raise OSError, "Desktop not supported (os.startfile could not be used)" 59 60 return subprocess.Popen(cmd).pid 61 62 # vim: tabstop=4 expandtab shiftwidth=4