2012-01-07 13 views
7

Tengo un código de AppleScript que estoy ejecutando con osascript. Esto es parte de un programa de Perl más grande. Me gustaría poder imprimir en stdout desde AppleScript, y luego hacer que el script de Perl procese. Pero no he podido imprimir desde AppleScript. ¿Que debería hacer?Imprimir en stdout desde osascript/Applescript

Aquí es lo que he intentado:

  • do shell script "echo Foo". No abandona a Foo.
  • This Google Groups discussion hace algunos trucos para abrir/dev/fd/1. Para mí, me da un error de "archivo de Macintosh HD: dev: fd: 1 no se ha encontrado"

Aquí es el guión que estoy corriendo:

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 

Desde osascript imprimirá automáticamente el último valor de un programa, podría recopilar las URL en una lista e imprimir eso. Pero entonces mi script de Perl tendría que analizar la lista, eliminar citas, etc. Parece que debería ser más sencillo imprimir una URL por línea.

Gracias

Respuesta

4

No sé cómo hacer lo que estás haciendo y no sé Perl, sin embargo, creo que se podría hacer el análisis de Perl simple si recoja sus URL en una cadena en lugar de una lista. Cada url estaría en una línea separada de la cadena. Perl debería ser capaz de convertirlo en una matriz con bastante facilidad y luego hacer algo con él. Algo así como el AppleScript abajo. Por supuesto, puede usar un separador diferente en el AppleScript. Utilicé "return" pero podría ser una "coma" o cualquier otro personaje que desee. Lo que sea más fácil para ti en perl, cambiar la cadena a una matriz.

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

Gracias, que hará las cosas más fáciles de analizar. La salida sería básicamente la misma que si hubiera impreso. Pero voy a dejar de aceptar eso como la respuesta, con la esperanza de que alguien más sepa cómo imprimir sin formar una cuerda. – Evan

+0

Nadie más está respondiendo esto, así que aceptaré esta respuesta ... – Evan

+1

¿Por qué la única forma de llegar a stdout desde osascript es el valor de retorno final? – justingordon

1

He encontrado que puedo usar 'log' para volcar los resultados en STDERR, si tuviera que utilizar Chrome en lugar de 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

Esta es la mejor respuesta para mí, ya que puede enviar a otros programas desde un bucle, bueno para bucles masivos. –

Cuestiones relacionadas