在AppleScript的并发调用中访问共享属性/变量

时间:2015-12-25 02:09:27

标签: applescript concurrent-programming

这是我第一次编写一个AppleScript,我想完成一个特定的用例,其中同一个脚本的多个调用能够访问和修改特定的全局变量/属性。

以虚拟脚本为例:

property counter : 0
set counter to counter + 1
delay 5
log counter

假设此脚本的第二个实例在第一个实例后1秒开始。我希望它在结束时输出2,而不是1

如何完成这样的用例?是否可以使用为此目的创建的环境变量?

(如果我可以提供帮助,则不希望从文件读取/写入值)

1 个答案:

答案 0 :(得分:0)

根据您的条件,我建议您使用UserDefaults。可以通过简单的shell命令访问它们:

defaults write [domain] [key] [value]

defaults read [domain] [key]

要在applescript中执行这些shell脚本,您可以使用:

do shell script "my_shell_code"

以下是您可以在脚本中使用的计数器的一些功能:

on RegisterCounter()
try
do shell script "defaults read com.himanshu.my_timer_script counter"
on error
do shell script "defaults write com.himanshu.my_timer_script counter 0"
end try
end RegisterCounter

on IncrementCounter()
my RegisterCounter()
do shell script ("defaults write com.himanshu.my_timer_script counter " & (quoted form of (((my GetValueOfCounter()) + 1) as text)))
end IncrementCounter

on GetValueOfCounter()
my RegisterCounter()
return (do shell script "defaults read com.himanshu.my_timer_script counter") as integer
end GetValueOfCounter

on ResetCounter()
try
do shell script "defaults delete com.himanshu.my_timer_script counter"
my RegisterCounter()
end try
end ResetCounter

将这些函数粘贴到脚本的开头或结尾,然后使用以下命令调用它们:

my FunctionName()