26

My application prints a PDF to a temporary file. How can I open that file with the default application in Python?

I need a solution for

  • Windows
  • Linux (Ubuntu with Xfce if there's nothing more general.)

Related

Community
  • 1
  • 1
Georg Schölly
  • 124,188
  • 49
  • 220
  • 267
  • 2
    "The standard application"? PDF Document Viewer? Ghostscript? gs? Adobe Reader? Do you want the OS to do the file-type to application mapping? What are you asking for? – S.Lott Nov 05 '09 at 11:09
  • 5
    @S.Lott I think 'the standard application' is clearly a synonym for the default application, so let the OS decide which app to run. – danio Nov 05 '09 at 11:51
  • 2
    @danio: It may be "clearly a synonym" to some. The question, however, doesn't define "standard application" in any useful way. I'd rather not assume, since other people will refer to this question in the future. – S.Lott Nov 05 '09 at 15:10

6 Answers6

36

os.startfile is only available for windows for now, but xdg-open will be available on any unix client running X.

if sys.platform == 'linux2':
    subprocess.call(["xdg-open", file])
else:
    os.startfile(file)
Georg Schölly
  • 124,188
  • 49
  • 220
  • 267
Nicolas Dumazet
  • 7,147
  • 27
  • 36
10

on windows it works with os.system('start <myFile>'). On Mac (I know you didn't ask...) it's os.system('open <myFile>')

Kai Huppmann
  • 10,705
  • 6
  • 47
  • 78
8

Open file using an application that your browser thinks is an appropriate one:

import webbrowser
webbrowser.open_new_tab(filename)
jfs
  • 399,953
  • 195
  • 994
  • 1,670
4
if linux:
    os.system('xdg-open "$file"') #works for urls too
else:
    os.system('start "$file"') #a total guess
pixelbeat
  • 30,615
  • 9
  • 51
  • 60
4

A small correction is necessary for NicDumZ's solution to work exactly as given. The problem is with the use of 'is' operator. A working solution is:

if sys.platform == 'linux2':
    subprocess.call(["xdg-open", file])
else:
    os.startfile(file)

A good discussion of this topic is at Is there a difference between `==` and `is` in Python?.

Community
  • 1
  • 1
neoblitz
  • 99
  • 5
0

Ask your favorite Application Framework for how to do this in Linux.

This will work on Windos and Linux as long as you use GTK:

import gtk
gtk.show_uri(gtk.gdk.screen_get_default(), URI, 0)

where URI is the local URL to the file

u0b34a0f6ae
  • 48,117
  • 14
  • 92
  • 101
  • I'm using `Tkinter`... I can't see any similar function in it. `GTK` is definitely not my favorite application framework (`Tkinter` probably isn't either, but it's what I'm using for this project.) – ArtOfWarfare May 04 '15 at 18:43