从osascript / Applescript打印到stdout

时间:2012-01-07 02:32:58

标签: applescript

我正在使用osascript执行一些AppleScript代码。这是更大的Perl程序的一部分。我希望能够从AppleScript打印到stdout,然后让Perl脚本处理输出。但是我无法在AppleScript中打印。我该怎么办?

这是我尝试过的:

  • do shell script "echo Foo"。不是ouptut Foo。
  • This Google Groups discussion有一些技巧可以打开/ dev / fd / 1。对我来说,我收到“文件Macintosh HD:dev:fd:1未找到”的错误

这是我正在运行的脚本:

tell application "Safari"
        set window_list to every window
        repeat with the_window in window_list
                set tab_list to every tab in the_window

                repeat with the_tab in tab_list
                        set the_url to the URL of the_tab
                        -- I'd like to put a print statement here,
                        -- instead of display dialog
                        display dialog the_url
                end repeat
        end repeat
end tell

由于osascript将自动打印程序的最后一个值,我可以将URL收集到列表中并打印出来。但是我的Perl脚本必须解析列表,删除引号等。似乎每行打印一个URL应该更直接。

由于

3 个答案:

答案 0 :(得分:4)

我不知道如何做你要问的事情,我不知道Perl,但是如果你用字符串而不是列表收集你的网址,我认为你可以简单地从perl解析。每个网址都位于字符串的单独一行。 Perl应该能够很容易地将它变成一个数组,然后用它做一些事情。类似于下面的AppleScript。当然,您可以在applescript中使用不同的分隔符。我使用“返回”但它可以很容易地成为“逗号”或任何其他你想要的角色。无论你在perl中最容易将字符串更改为数组。

set urlString to ""

tell application "Safari"
    set window_list to every window
    repeat with the_window in window_list
        set tab_list to every tab in the_window

        repeat with the_tab in tab_list
            set the_url to the URL of the_tab
            set urlString to urlString & the_url & return
        end repeat
    end repeat
end tell

return text 1 thru -2 of urlString

答案 1 :(得分:1)

我发现我可以使用'log'将结果转储到STDERR, 虽然我不得不使用Chrome而不是Safari:

#!/usr/bin/osascript
tell application "Chrome"
    repeat with w in every window
        repeat with t in tabs of w
            log (get URL of t)
        end repeat
    end repeat
end tell

答案 2 :(得分:1)

只需使用log即可。

MacBookPro:~ zxj5470$ cat demo.scpt tell application "Terminal" set WindowNum to get window count log WindowNum end tell MacBookPro:~ zxj5470$ osascript demo.scpt 1