2012-01-07 10 views
7

Tôi có một số mã AppleScript mà tôi đang thực hiện với osascript. Đây là một phần của chương trình Perl lớn hơn. Tôi muốn để có thể in để stdout từ AppleScript, sau đó có quá trình kịch bản Perl đầu ra. Nhưng tôi đã không thể in từ bên trong AppleScript. Tôi nên làm gì?In để xuất bản từ osascript/Applescript

Đây là những gì tôi đã cố gắng:

  • do shell script "echo Foo". Không hờn dỗi Foo.
  • This Google Groups discussion thực hiện một số thủ thuật để mở/dev/fd/1. Đối với tôi, tôi nhận được một lỗi của "File Macintosh HD: dev: fd: 1 không tìm thấy"

Dưới đây là kịch bản tôi đang chạy:

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 

Kể từ osascript sẽ tự động in giá trị cuối cùng của một chương trình, tôi có thể thu thập các URL vào một danh sách và in nó. Nhưng sau đó kịch bản Perl của tôi sẽ phải phân tích cú pháp danh sách, xóa dấu ngoặc kép, v.v. Có vẻ như sẽ đơn giản hơn khi chỉ in một URL trên mỗi dòng.

Cảm ơn

Trả lời

4

Tôi không biết làm thế nào để làm những gì bạn đang yêu cầu và tôi không biết Perl, tuy nhiên tôi nghĩ rằng bạn có thể làm cho phân tích cú pháp từ perl đơn giản nếu bạn thu thập các url của bạn trong một chuỗi thay vì của một danh sách. Mỗi url sẽ nằm trên một dòng riêng biệt của chuỗi. Perl sẽ có thể biến nó thành một mảng khá dễ dàng và sau đó làm một cái gì đó với nó. Một cái gì đó giống như dưới đây. Tất nhiên bạn có thể sử dụng một dấu phân cách khác trong bản ghi chép. Tôi đã sử dụng "return" nhưng nó có thể dễ dàng là "dấu phẩy" hoặc bất kỳ ký tự nào khác mà bạn muốn. Bất cứ điều gì là dễ dàng nhất cho bạn trong perl để thay đổi chuỗi thành một mảng.

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

Cảm ơn, mà sẽ làm cho mọi việc dễ dàng hơn để phân tích. Đầu ra về cơ bản sẽ giống như tôi đã in. Nhưng tôi sẽ tiếp tục chấp nhận điều đó như là câu trả lời, với hy vọng rằng một người khác sẽ biết cách in mà không xây dựng một chuỗi. – Evan

+0

Không ai khác trả lời câu hỏi này, vì vậy tôi sẽ chấp nhận câu trả lời này ... – Evan

+1

Tại sao cách duy nhất để có được stdout từ từ osascript là giá trị trả lại cuối cùng? – justingordon

1

tôi thấy rằng tôi có thể sử dụng 'đăng nhập' để đổ kết quả để stderr, mặc dù tôi đã phải sử dụng Chrome thay vì 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

Đây là câu trả lời tốt nhất cho tôi khi bạn có thể xuất ra các chương trình khác từ bên trong vòng lặp, tốt cho các vòng lặp lớn. –