Jak sprawić, by istniejący plik AppleScript działał jako usługa?

11

Zrobiłem AppleScript, zapisałem go jako plik w określonym folderze na moim dysku twardym. Teraz chcę przypisać do niego skrót i wygląda na to, że muszę utworzyć usługę za pośrednictwem Automatora, ale Run AppleScriptprosi mnie o umieszczenie kodu w środku, podczas gdy chcę wykonać już istniejący plik .scpt. Jak to zrobić?

Nakilon
źródło

Odpowiedzi:

9

Tak, Automator jest tutaj najlepszą opcją. Aby utworzyć usługę, wykonaj następujące kroki:

  1. Otwórz Automator i wybierz Usługa:

    wprowadź opis zdjęcia tutaj

  2. Wyszukaj „applecript” i przeciągnij akcję do prawego panelu:

    wprowadź opis zdjęcia tutaj

  3. Zmień Service receives selected textna, Service receives no inputaby zawsze pojawiał się w menu Usługi:

    wprowadź opis zdjęcia tutaj

  4. Zamień na (* Your script goes here *):

    do shell script "/usr/bin/osascript /path/to/your/script.scpt"

    jeśli chcesz wykonać istniejący .scptplik. Zauważ, że osascript nie może obsłużyć interakcji użytkownika, takich jak wyświetlanie okna dialogowego:

    wprowadź opis zdjęcia tutaj

    Aby obejść to ograniczenie, skorzystaj z tego obejścia lub po prostu zamień (* Your script goes here *)zawartość skryptu.

  5. Zapisz to:

    wprowadź opis zdjęcia tutaj

  6. Jeśli chcesz, możesz przypisać skrót do nowej usługi. Wybierz Usługi> Preferencje usług w Finderze (lub dowolnej otwartej aplikacji):

    wprowadź opis zdjęcia tutaj

  7. Przypisz nie tak powszechny skrót:

    wprowadź opis zdjęcia tutaj

  8. Teraz twoja usługa jest dostępna z dowolnej aplikacji za pomocą skrótu przypisanego w poprzednim kroku:

    wprowadź opis zdjęcia tutaj

Jeśli kiedykolwiek chcesz pozbyć się usługi otwartej ~/Library/Services, usuń usługę i opróżnij kosz:

wprowadź opis zdjęcia tutaj

jaume
źródło
Powiedziałem, że chcę wykonać istniejący plik skryptu, a nie pisać go ponownie w Automatorze.
Nakilon
Myślałem, że kopiowanie / wklejanie będzie w porządku, ale tak, masz rację, jest to wyraźnie określone w twoim pytaniu. Użyj osascript, jak wyjaśniono w innych odpowiedziach.
jaume
@Nakilon Dodałem, jak używać osascriptw Automatorze, aby uruchomić .scptplik, ograniczenie i dwa obejścia.
jaume
Właśnie to zrobiłem. Zadziałało; ale uruchomienie skryptu zajmuje teraz od 4 do 5 sekund. (Gdy kod został zapisany bezpośrednio w przepływie pracy, uruchomił się niemal natychmiast.) Masz pojęcie, co go powoduje lub jak przyspieszyć jego uruchomienie?
Zack
1
@Zack Dzięki, nie wiem, dlaczego osascriptpotrzeba 4 dodatkowych sekund na wykonanie skryptu, ale Automator nie jest przyczyną opóźnienia, co było moim zmartwieniem. Możesz chcieć debugować osascript, zobacz opensourcehacker.com/2011/12/02/... i stackoverflow.com/questions/31045575/…
jaume
4

W skrypcie dodaj on runargument:

on run
    -- do whatever the script does
end run

Następnie możesz użyć akcji Automatora „Uruchom skrypt powłoki” za pomocą osascriptpolecenia:

osascript /path/to/script.scpt

osascriptto polecenie, które wykonuje AppleScript w powłoce. Potrzebujesz wierszy w skrypcie, aby skrypt mógł być wykonywany poza edytorem AppleScript.

alexwlchan
źródło
1
Nie musisz dołączać jawnego modułu obsługi. Wszystkie skrypty mają niejawny moduł obsługi. Powodem, dla którego działanie Uruchom AppleScript w Automatorze jest jawna procedura obsługi, może być to, że Automator używa specjalnego on run {input, arguments}formularza, ale nawet w Automatorze możesz po prostu usunąć procedurę obsługi.
Lri
1
@ ͏͏͏ Zastanawiam się, czy ten ping do ciebie dotrze. Wyrazy uznania dla kreatywnego wyboru nazwy.
bmike
3

Być może warto rzucić okiem na tę usługę , która pozwala „tworzyć usługi Mac OS X z dowolnego skryptu”.

Piotr
źródło
1
Czy możesz podać tutaj odpowiedź, a nie tylko link
użytkownik151019
2

Nie polecałbym tworzenia usług Automatora w celu przypisywania skrótów do skryptów. W wersjach 10.7 i 10.8 występuje błąd, w którym skróty klawiaturowe dla usług Automatora nie zawsze działają, dopóki nie najedziesz myszą na menu usług z paska menu. Występuje również stosunkowo długie (może 0,1 do 1 s) opóźnienie przed uruchomieniem usług.

Zobacz tę odpowiedź, aby poznać inne sposoby przypisywania skrótów klawiaturowych do skryptów. Sam używam FastScripts i Alfred.

Lri
źródło
Nigdy nie doświadczyłem tej potrzeby zawisu? czy masz więcej szczegółów na temat tego, o czym mówisz
markhunte
1
Nie jestem pewien, czy wpływa to na wszystkie instalacje OS X lub na wszystkie usługi, ale natknąłem się na to wiele razy w różnych instalacjach, i wspominały o tym inne osoby tutaj i w Super User. Czasami skróty klawiaturowe dla wszystkich usług Automatora przestają działać (lub nic się nie dzieje po ich naciśnięciu), ale zaczynają działać ponownie, gdy najedziesz myszą na menu usług z paska menu lub na przykład wybierzesz jedną usługę za pomocą myszy.
Lri
2

Możesz URUCHOMIĆ istniejący skrypt za pomocą prostej usługi automatyzującej, takiej jak ta. I przypisuj skrót z poziomu skrótów klawiaturowych jak zwykle. Pamiętaj tylko, że niektóre aplikacje mogą wymagać ponownego uruchomienia przed wybraniem skrótów.

przykład.

skrypt hello:

say "hello"

Usługa Automatora: wprowadź opis zdjęcia tutaj

Który w tym przykładzie używa:

  • Brak wejścia
  • Każda aplikacja.

Akcja jest uruchomionym skryptem powłoki W kodzie użyto po prostu uniksowego polecenia osascript i ścieżki do pliku. Przekazanie danych wejściowych może być standardowe lub argument

To nic specjalnego do skryptu.

Więcej informacji na temat polecenia osascript można znaleźć na stronach podręcznika użytkownika . Strona man podaje kolejny przykład, w którym można przekazać argumenty do skryptu.

markhunte
źródło
0

Aby opracować Usługę, potrzebujesz oprogramowania, które utworzy Usługę, takiego jak jedno z następujących:

  1. Automator do utworzenia przepływu pracy
  2. ThisService, aby utworzyć .service
  3. Xcode, aby utworzyć .app

Wszystkie powyższe rodzaje usług są pakietami. Wszystkie są folderami zawierającymi plist, który określa atrybuty usługi.

Oto jak utworzyłem usługę za pomocą Automatora, który używa akcji Automatora „Uruchom AppleScript”, aby wywołać istniejący skrypt.

Usługa Automatora, która wywołuje istniejący AppleScript

Kaydell
źródło