我正在使用osascript
执行一些AppleScript代码。这是更大的Perl程序的一部分。我希望能够从AppleScript打印到stdout,然后让Perl脚本处理输出。但是我无法在AppleScript中打印。我该怎么办?
这是我尝试过的:
do shell script "echo Foo"
。不是ouptut Foo。这是我正在运行的脚本:
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应该更直接。
由于
答案 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