在python脚本和applescript之间传递和接收值

时间:2012-11-21 22:07:38

标签: python applescript

我对python和applescript很新。我有一个python脚本,它调用2个applescripts。我想在python中定义几个全局变量并传递给applescript 1,这些值将由applescripts 1中的不同函数修改,然后传回python脚本,然后将这些值传递给applescript 2使用。

我搜索了一下,我尝试了以下内容:

in applescript,

on run argv 
    if (item 1 of argv is start with "x") then 
      function1(item1 of argv)
    else 
      function2 (item 1 of argv)
      function3 (item 2 of argv)
 end run

 on function1 (var)
  set var to (something code to get value from interaction with user)
 return var 
 end function1

在python脚本中     进口口     import sys

os.system ('osascript Setup.scpt')
variable1 = sys.argv[1]
variable2 = sys.argv[2]
在applescript2中,我做了类似applecirpt1的事情。

然而,这不起作用。我试图在两个脚本中打印出所有argv,看起来没有正确传递值。有人能给我更多指导吗?谢谢!

2 个答案:

答案 0 :(得分:0)

你必须从"运行"中返回一些内容。在applescript中处理程序,否则返回的结果只是最后一行代码的结果。所以你想要做这样的事情......

on run argv
    set returnList to {}

    if (item 1 of argv starts with "x") then
        set end of returnList to function1(item1 of argv)
    else
        set end of returnList to function2(item 1 of argv)
        set end of returnList to function3(item 2 of argv)
    end if

    return returnList
end run

如果您希望用户提供某些内容,您的功能也需要看起来像这样。请注意,我告诉Finder显示对话框。这是因为你是从python运行它的,如果某些应用程序没有处理用户交互,它将会出错。

on function1(var)
    tell application "Finder"
        activate
        set var to text returned of (display dialog "Enter a value" default answer "")
    end tell
    return var
end function1

答案 1 :(得分:0)

os.system():在子shell中执行命令(字符串)。这是通过调用标准C函数系统()来实现的,并且具有相同的限制。

sys.stdin, sys.stout的更改不会反映在已执行命令的环境中。 返回值是退出状态,而不是osascript输出。

使用 subprocess.Popen

import os, sys, commands
from subprocess import Popen, PIPE

var1 = sys.argv[1] 
var2 = sys.argv[2] 
(var3, tError) = Popen(['osascript', '/Setup.scpt', var1, var2], stdout=PIPE).communicate()
print var1
print var2
print var3

osascript命令始终返回string。 如果AppleScript返回list,则python中的字符串将用逗号和空格分隔。