我对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,看起来没有正确传递值。有人能给我更多指导吗?谢谢!
答案 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中的字符串将用逗号和空格分隔。