Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用AppleScript将对象记录到控制台_Applescript - Fatal编程技术网

如何使用AppleScript将对象记录到控制台

如何使用AppleScript将对象记录到控制台,applescript,Applescript,我只是想在applescript的整个生命周期中记录对象的状态。在其他语言中,object的toString()方法将呈现等价的文本,我可以使用这些方法。在AppleScript中,情况似乎并非如此 convert applescript object to string (similar to toString) 将finder对象(及其属性)输出到AppleScript编辑器的“结果”窗口,但前提是它是最后执行的语句 如果我有一个trace()语句(用于记录消息): 我想知道更好的方法登录

我只是想在applescript的整个生命周期中记录对象的状态。在其他语言中,object的toString()方法将呈现等价的文本,我可以使用这些方法。在AppleScript中,情况似乎并非如此

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并没有让它变得简单:

  • log
    在AppleScript编辑器中运行时或通过
    osascript
    运行时(在这种情况下为
    stderr
    ),仅记录日志-在其他情况下,例如当应用程序运行带有
    NSAppleScript
    Cocoa类的脚本时,输出将丢失

  • log
    只接受一个参数;虽然它接受任何对象类型,但它不容易获得非内置类型的有意义表示:例如,尝试
    logme
    获取有关脚本本身的信息;通常,必须使用
    log(获取属性)
    来获取有意义的信息;请注意所需的繁琐语法,因为仅使用
    log properties of
    通常只打印引用表单的名称,而不是它所指向的属性(例如,
    log properties of me
    无用地只输出
    (*properties*)

  • 一般来说,AppleScript很难获得非内置类型对象的有意义的文本表示:
    作为文本
    (与:
    作为字符串
    )对于此类对象,令人恼火的中断-抛出运行时错误;尝试
    me-as-text

下面是解决这些问题的辅助程序子例程:

  • dlog()
    是一个子例程,它将派生任何对象的有意义文本表示与基于全局配置变量写入多个日志目标(包括syslog和文件)的能力相结合
  • toString()
    (有效嵌入
    dlog()
    )是一个子程序,它接受任何类型的单个对象,并从中派生有意义的文本表示
帽尖至@1.61803;他的回答为实现各种日志目标提供了指针

示例:
#设置:记录到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.”