Discussion:
start default application for read a pdf from python
Angelo Ballabio
2009-09-08 19:42:20 UTC
Permalink
I try to start a default application for reading a pdf file inside the
python script.

I try

os.startfile(name,option) but say me startfile not implemented

there are some system to start for example acrobar or okular from the
script with a name of pdf file?

thenks Angelo
Grant Edwards
2009-09-08 20:01:13 UTC
Permalink
Post by Angelo Ballabio
I try to start a default application for reading a pdf file
inside the python script.
I try
os.startfile(name,option) but say me startfile not implemented
Are you _sure_ it says startfile not implemented? Or does
Post by Angelo Ballabio
os.startfile("foo.bar")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'startfile'

[You'll always get better answers if your questions are
specific and precise -- whenever possible, you should paste in
actual code and error messages.]
Post by Angelo Ballabio
there are some system to start for example acrobar or okular
from the script with a name of pdf file?
Google tells me that Okular is something for KDE. That implies
that you're running Linux or Unix? [When asking a question, you
also need to provide OS, Python version, etc.]

If you are running Linux/Unix, then I suspect the answer to
your problem can be seen in the fine documentation at

http://docs.python.org/library/os.html#process-management

os.startfile(path[, operation])

Start a file with its associated application.
[...]
Availability: Windows.

If you want to do something similar on Unix/Linux, you'll
probably need to call some desktop-specific.

Googling for python+startfile+linux found me these links:

http://mail.python.org/pipermail/python-list/2003-March/193897.html
http://lists.freebsd.org/pipermail/freebsd-python/2004-August/000138.html
--
Grant Edwards grante Yow! FOOLED you! Absorb
at EGO SHATTERING impulse
visi.com rays, polyester poltroon!!
Angelo Ballabio
2009-09-08 20:22:40 UTC
Permalink
Sorry to not be very specific

My problem is a way to run a default application to read and show a pdf
file from unix or windows, i have a mixed ambient in the office, so I am
try to find a way to start a application to show this pdf file I
generate whith reportlab. actualy I write a file in a directory and then
I have to open the directory find a file and open it, I try to find a
way to do this automatic, in this way then they only have to close the
windows.

sorry I do not see before is only for windows, so this means under unix
system I cant to use.

thenks for the suggestion


Angelo
Post by Grant Edwards
Post by Angelo Ballabio
I try to start a default application for reading a pdf file
inside the python script.
I try
os.startfile(name,option) but say me startfile not implemented
Are you _sure_ it says startfile not implemented? Or does
Post by Angelo Ballabio
os.startfile("foo.bar")
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'startfile'
Albert Hopkins
2009-09-08 23:22:10 UTC
Permalink
Post by Angelo Ballabio
My problem is a way to run a default application to read and show a pdf
file from unix or windows, i have a mixed ambient in the office, so I am
try to find a way to start a application to show this pdf file I
generate whith reportlab.
The (most) portable way to do so in Linux (not necessarily Unix) is to
use the xdg-open command. Ex,

subprocess.Popen(['xdg-open', 'my-document.pdf'])

If you want cross-platform between Linux/Windows, then it's advisable to
write a wrapper function that checks the value of sys.platform and and
acts accordingly.

-a
Angelo Ballabio
2009-09-09 19:59:22 UTC
Permalink
Thenks for this suggestion, at the end I find this solution

import os
.
.
#then where I decide to show the file in the default application I put this

#file_name the name I construct with path and all necessary
#recor contain all the data of one record end the 4th position
#the name of the file
#for example
file_name = os.path.join('document',str(record[3]) + ".pdf")
#the joun function make the separator from ducoment to the file
#name relative to operatin system (windows '\') , (unix '/')

#then where I call the default program
if os.name == "nt":
os.filestart("%s" % nome_file)
elif os.name == "posix":
os.system("/usr/bin/xdg-open %s" % nome_file)

Other nice solution is

import webbrowser
.
.
.
webbrowser.open(file_name)

The difference is in unix sistem, the first call the default program for
read the file of type, in this case pdf, this meens okular, acroread, or
whatever, the second open the konqueror in kde desktop, in windows the
function os.filestart call the default application for thet type of file

interesting discussion about this I find in :

http://ubuntuforums.org/showthread.php?t=1003198

very thenks to all
Angelo
Post by Albert Hopkins
The (most) portable way to do so in Linux (not necessarily Unix) is to
use the xdg-open command. Ex,
subprocess.Popen(['xdg-open', 'my-document.pdf'])
Loading...