2012-01-07 76 views
7

我有一些AppleScript代碼,我正在執行osascript。這是一個更大的Perl程序的一部分。我希望能夠從AppleScript打印到stdout,然後讓Perl腳本處理輸出。但是我一直無法從AppleScript內打印。我該怎麼辦?從osascript/Applescript打印到stdout

這是我已經試過:

  • do shell script "echo Foo"。不ouptut Foo。
  • This Google Groups discussion做了一些技巧來打開/ dev/fd/1。對於我來說,我得到一個錯誤「文件的Macintosh HD:開發: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。

感謝

回答

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 
+0

謝謝,這會讓事情變得更容易解析。輸出基本上和我打印的一樣。但是我會延遲接受這個答案,希望別人能夠知道如何在沒有建立字符串的情況下進行打印。 – Evan 2012-01-07 16:37:31

+0

沒有人回答這個問題,所以我會接受這個答案... – Evan 2012-01-09 17:08:34

+1

爲什麼從osascript獲得stdout的唯一方法是最終返回值? – justingordon 2014-03-14 19:11:11

1

我發現我可以用「登錄」轉儲結果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 
+0

對於我來說,這是最好的答案,因爲您可以從循環內輸出到其他程序,適用於大規模循環。 – 2017-08-03 09:06:43

相關問題