On 06/05/2012 02:24, Alan Jump wrote:
Trying to massage an older package (not written by me) into functioning
order. The issue I'm having is getting printing functionality to work.
The code snippet in question:

         if platform.system() == 'Windows':
             try:
                 import win32api
             except:
                 print('* FAILED TO LOAD WINDOWS EXTENSION')
                 return
             try:
                 win32api.ShellExecute (0, "print", filename, None, ".", 0)
             except:
                 print('* FAILED TO SEND PRINT TO WINDOWS PRINTER')
                 return

The output file is generated in a separate code section and the filename
being passed has been verified, but I invariably get the message in the
second exception. That tells me the win32api is being properly imported,
but for some reason, it's throwing an exception when trying to write to
the print device.

Some general advice for a start: you almost *never* want to
use a general except: clause (ie without a specific exception
class): it catches *everything* - including Ctrl-C. So, in
the try-except around "import win32api" you just want to
catch ImportErrors -- at least, I assume so.

However, you've circumvented that particular issue by removing
the except clause from your ShellExecute command. Contrary to
Vernon's suggestion, that won't actually be using the DOS
"print" command but rather passing the "print" verb along to
the application which is registered against the filename in
question via the Shell verb handling mechanism.

It would be interesting to see the exact error message you
get but permissions or UAC is definitely a possibility. Also,
and this is where it gets messier, the "print" verb will, in
most cases, go to the *default* printer on the machine you're
on -- and with the default settings. It's possible that this
isn't the printer you think it is. Some applications keep their
own track of which printer you last used, so you might fail to
realise which one is actually the default.

If that is the case you might want to look at this:

  http://timgolden.me.uk/python/win32_how_do_i/print.html#shellexecute

for a possible way to specify a printer.


TJG
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to