[Pythonmac-SIG] Python app with aemreceive is not scriptable

Kevin Walzer kw at codebykevin.com
Wed Jan 6 00:07:35 CET 2010


On 1/5/10 11:41 AM, has wrote:

> If I understand you, Tk implements a 'do script' handler that executes arbitrary Tcl scripts (right...no potential security issues there, then) and you are installing your own 'do script' handler as well.

Yes, that's basically it.

>
> If that's the case, make sure your handler gets installed _after_ Tk has auto-installed its version, otherwise Tk will simply replace yours with its own. I'm not familiar with Tk though, so can't tell you at what point you need to do this.
>
> Alternatively, give your handler a different name and Apple event code so that it doesn't conflict with Tk's handler in the first place.

This turned out to be the solution. However:

It appears that Tcl and Python differ in some respects in code 
execution. Python doesn't appear to return a value from code that is 
passed to the "exec" statement.

Here, first, is my aemreceive code:

from aemreceive import *

def doScript(script):
     exec script


installeventhandler(
         doScript,
         'CoKvscpt',
         ('----', 'script', kae.typeUnicodeText)
         )

And here is my sample AppleScript code:

tell application "MyApp"
	run script "print \"foo\""
end tell

The comparable Tcl code snippet, "puts \"foo\"", returns a value of 
"foo"--the string printed to standard output. I expect to see the same 
thing in Python. But the Python function above returns no output to 
AppleScript--the value of "foo" goes down a black hole. I don't see the 
output logged to Console, either.

I didn't see this issue with the sample code that has includes with 
aemreceive, but that code explicitly returns values:

def unicodeNumbers(text):
	return [ord(c) for c in text]

So I'm trying to figure out how to capture the standard output of a 
Python code snippet that's been "exec'ed." More of a general Python 
question than a Mac question, granted, but the context wouldn't make 
much sense on comp.lang.python.

As far as the security issues, I agree, that's a concern. My basic idea 
is to expose a selection of commands in my application, either wrapped 
in AppleScript commands or simply as Python commands accessed via the 
"run script" command. The goal *isn't* to encourage arbitrary Python 
snippets.

Thanks,
Kevin

-- 
Kevin Walzer
Code by Kevin
http://www.codebykevin.com


More information about the Pythonmac-SIG mailing list