2012-01-07 31 views
7

osascriptで実行しているAppleScriptコードがあります。これは大きなPerlプログラムの一部です。私は、AppleScriptからstdoutに出力し、Perlスクリプトに出力を処理させたいと思っています。しかし、私はAppleScriptの中から印刷することができませんでした。私は何をすべきか?osascript/Applescriptからstdoutに印刷

は、ここで私が試したものです:

  • do shell script "echo Foo"。 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スクリプトは、リストを解析したり、引用符を取り除かなければならないでしょう。行ごとに1つのURLを印刷する方が簡単なようです。

おかげ

答えて

4

私は、しかし、私はあなたの代わりに文字列でURLを収集する場合は、単純なperlのから構文解析を行うことができると思う、あなたが求めていると私はPerlを知らない何をするのか分かりませんリストの各URLは文字列の別の行にあります。 Perlはそれを簡単に配列に変換し、それを使って何かをすることができます。下のようなものがあります。もちろん、別のセパレータを使用することもできます。私は "リターン"を使用しましたが、それは簡単に "コンマ"またはあなたが望む他の文字でもあります。文字列を配列に変更するには、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

+0

誰もこれに答えていないので、私はこの答えを受け入れるでしょう... – Evan

+1

なぜオスカスクリプトからstdoutに到達する唯一の方法が最終的な戻り値ですか? – justingordon

1

私は私が代わりにサファリのChromeを使用していたもののSTDERR、 に結果をダンプする「ログイン」を使うことが分かっ:解析する事が容易になります

 
#!/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

ループ内から他のプログラムに出力することができるので、大規模なループに適しています。 –

関連する問題