[Pythonmac-SIG] CGI + appscript newbie question/problem
Nicholas Riley
njriley at uiuc.edu
Mon May 28 16:44:39 CEST 2007
On Sun, May 27, 2007 at 05:04:25PM -0700, Andres Francisco Rojas wrote:
> but when I try to import appscript into the script run as cgi I get
> an 500 Internal Server Error.
Typically you should look in the Web server logs
(/var/log/httpd/error_log) in that case to see the details of the
error, which are not returned in the browser to preserve security.
You can also do:
import cgitb; cgitb.enable()
at the beginning of your script, so you get a nice HTML traceback if
you get a Python exception.
The thing is, I tried your script (after cleaning it up slightly) and
I don't get a 500 error or the expected result, I simply get the
following in the error log:
"INIT_Processeses(), could not establish the default connection to the
WindowServer."
Since you're using /usr/bin/python and assuming you're using 10.4.x,
that should be the system Python 2.3.5. What version of appscript are
you using? (You can print it with 'import appscript;
appscript.__version__').
> # Define function to generate HTML form.
> def generate_form():
> print "<HTML>\n"
'print' already includes newlines, you don't need to use them. Not
that string printing is a recommended templating mechanism, but if you
do need to do it, you might try one of Python's other quoting styles;
you can always use single quotes so you don't need to escape things,
or triple quotes for multiline strings. For example, instead of:
print "\t<FORM METHOD=post ACTION=\"1.cgi\">\n"
print "\t<INPUT TYPE=hidden NAME=\"action\" VALUE=\"launch\">\n"
use:
print '\t<form method="post" action="1.cgi"'
print '\t<input type="hidden" name="action" value="launch">'
So, as other people mentioned, you don't have access to control local
apps as the Web server user. This is a good thing for security.
However, you may be able to use remote Apple Events to do it. I
couldn't figure out a way to get a remote application to launch
without using the Finder. Appscript fails because it can't get the
app's terminology; with terms=False on a non-running TextEdit, I get
"AppData instance has no attribute 'path'".
This is really hacky, but it works sometimes; other times I get a
timeout during terminology retrieval. This may just be my slow old
machine.
app(url='eppc://user:password@127.0.0.1/Finder').startup_disk.files['Applications:TextEdit.app'].open()
texteditGUI = app(url='eppc://user:password@127.0.0.1/System%20Events').processes['TextEdit']
app(url='eppc://user:password@127.0.0.1/TextEdit', path='/Applications/TextEdit.app').activate()
mref = texteditGUI.menu_bars[1].menus
mref['File'].menu_items['New'].click()
mref['Edit'].menu_items['Paste'].click()
mref['Window'].menu_items['Zoom'].click()
Replace user:password with your username and password, above.
> mref['Window'].menu_items['Zoom Window'].click()
On my 10.4.9 machine this menu item is "Zoom", not "Zoom Window".
--
Nicholas Riley <njriley at uiuc.edu> | <http://www.uiuc.edu/ph/www/njriley>
More information about the Pythonmac-SIG
mailing list