如何使用AppleScript将对象记录到控制台
我只是想在applescript的整个生命周期中记录对象的状态。在其他语言中,object的toString()方法将呈现等价的文本,我可以使用这些方法。在AppleScript中,情况似乎并非如此如何使用AppleScript将对象记录到控制台,applescript,Applescript,我只是想在applescript的整个生命周期中记录对象的状态。在其他语言中,object的toString()方法将呈现等价的文本,我可以使用这些方法。在AppleScript中,情况似乎并非如此 convert applescript object to string (similar to toString) 将finder对象(及其属性)输出到AppleScript编辑器的“结果”窗口,但前提是它是最后执行的语句 如果我有一个trace()语句(用于记录消息): 我想知道更好的方法登录
convert applescript object to string (similar to toString)
将finder对象(及其属性)输出到AppleScript编辑器的“结果”窗口,但前提是它是最后执行的语句
如果我有一个trace()语句(用于记录消息):
我想知道更好的方法登录到控制台,但是想知道如何在一个脚本的中间写一个对象的属性(如Apple脚本编辑器),以测试哪种方式。< /P> < P>在Apple脚本编辑器中使用<代码>日志< /C> >语句。在Applescript编辑器中查看结果时,按窗口底部的“事件”按钮。通常情况下,按下“结果”按钮,然后您只会看到您提到的最后一条语句的结果。因此,将按钮更改为“事件”。这将向您显示脚本运行时发生的一切,另外还将显示贯穿整个代码的所有
log
语句。请注意,log
语句不必是文本。您可以记录任何对象
这是调试脚本并查看发生了什么的最佳方法。作为一个例子,试试这个,看看“事件”。实际上,如果您查看事件,您不需要太多的log
语句,因为所有内容都已记录
set someFolder to path to desktop
log someFolder
tell application "Finder"
set someItem to first item of someFolder
log someItem
set itemProps to properties of someItem
log itemProps
end tell
请尝试以下任一操作:
#回显到文件
shell脚本“echo”和引用的形式(myObj作为字符串)和
“>~/Desktop/as_debug.txt”
#写入文件
将myFile设置为打开以供访问(桌面路径为文本)
具有写入权限的“as_debug2.txt”
将myObj写入myFile
关闭访问我的文件
#登录到系统日志
执行shell脚本“logger-t'AS DEBUG'”&myObj
#显示对话框
显示对话框“错误:”&myObj
如果您试图记录的不是文本,您可以尝试:
的引用形式(myObj作为字符串)
AppleScript并没有让它变得简单:
在AppleScript编辑器中运行时或通过log
运行时(在这种情况下为osascript
),仅记录日志-在其他情况下,例如当应用程序运行带有stderr
Cocoa类的脚本时,输出将丢失NSAppleScript
只接受一个参数;虽然它接受任何对象类型,但它不容易获得非内置类型的有意义表示:例如,尝试log
获取有关脚本本身的信息;通常,必须使用logme
来获取有意义的信息;请注意所需的繁琐语法,因为仅使用log(获取属性)
通常只打印引用表单的名称,而不是它所指向的属性(例如,log properties of
无用地只输出log properties of me
)(*properties*)
- 一般来说,AppleScript很难获得非内置类型对象的有意义的文本表示:
(与:作为文本
)对于此类对象,令人恼火的中断-抛出运行时错误;尝试作为字符串
me-as-text
是一个子例程,它将派生任何对象的有意义文本表示与基于全局配置变量写入多个日志目标(包括syslog和文件)的能力相结合dlog()
(有效嵌入toString()
)是一个子程序,它接受任何类型的单个对象,并从中派生有意义的文本表示dlog()
#设置:记录到syslog并在home目录中创建一个文件。
#支持的其他目标:“日志”、“警报”
#设置为{}以禁止日志记录。
将DLOG_目标设置为{“syslog”,“~/as.log”}
#最前端应用程序前窗口的日志属性。
dlog(应用程序的前窗口(以文本形式指向最前面的应用程序的路径))
#自己的前窗口的日志属性;请注意多个参数的*list*语法。
dlog({“我的前窗:,前窗})
#以字符串形式获取正在运行的脚本的属性。
toString(me)#->,例如:[script name=“sandbox”]{选择:文档“sandbox2.scpt”文本的字符2475后的插入点,最前面的:true,类:应用程序,名称:“AppleScript Editor”,版本:“2.6”}
有关详细信息,请参见每个子例程上面的源代码注释
dlog()源代码
#记录指定对象的文本表示形式,这些对象可以是任何类型,通常用于调试。
#努力寻找每个对象的有意义的文本表示。
#概要
#dlog(任何主要对象列表)
#举例说明
#dlog(“before”)#单个对象
#dlog({“前窗口:,前窗口})#对象列表
#设置
#在脚本顶部,定义全局变量DLOG_TARGETS并将其设置为目标的*列表*(即使只有一个目标)。
#将DLOG_目标设置为{}#必须是一个包含以下任意组合的列表:“日志”、“系统日志”、“警报”,
#“空”列表意味着应该“禁用”日志记录。
#如果指定POSIX文件路径,则该文件将*附加*到;路径中的变量引用
#是允许的,出于礼貌,路径可能以“~”开头,以指向您的主目录。
#警告:虽然您可以*删除*变量定义以禁用日志记录,但您将受到额外的性能影响。
#设置示例
#例如,要同时使用AppleScript的log命令*和*显示GUI警报,请使用
Can’t make properties of application "Finder" into type text.
set someFolder to path to desktop
log someFolder
tell application "Finder"
set someItem to first item of someFolder
log someItem
set itemProps to properties of someItem
log itemProps
end tell
do shell script "echo '" & (current date) & ": Found " & Thisfilename & "' >> ~/logs/MyGreatAppleScript.log"
on TextOf(aVariable)
try
return "" & aVariable
on error errm
if errm begins with "Can’t make " ¬
and errm ends with " into type Unicode text." then ¬
return text 12 through -25 of errm
return "item of class " & (class of aVariable) & return & errm
end try
end TextOf
set my_int to 9945
log my_int
set my_srt to "Hamza"
log my_srt
set my_array ["Apple","Mango","Banana","Gava"]
log my_array
set my_obj to {"Ali"} as string
log my_obj
display dialog "my variable: " & myVariableName
say “This is a log statement.”
tell me to say “This is a log statement.”