2011-04-03 12 views

Odpowiedz

12
  • Otwarte Automator.app i utworzyć nową usługę.

  • Wybierz "Narzędzia" z listy działań po lewej stronie, a następnie przeciągnij operację "Uruchom skrypt powłoki" do przepływu pracy.

  • Wybierz /usr/bin/python jako powłokę.

  • Wpisz trochę pytona. Na przykład:

:

import sys 

for f in sys.stdin: 
    print "Hello World: " + f, 
  • zapisać usługi jako, powiedzmy, "Test"

  • Wypróbuj go w TextEdit.app. Wpisz tekst, zaznacz tekst, a następnie wybierz z menu polecenie TextEdit -> Usługi -> Test. Należy poprzedzić „Hello World” do każdego wiersza tekstu (jak w kodzie Pythona for f in sys.stdin)

Powyższy przykład pracuje z tekstem. Można go prawdopodobnie zmodyfikować do pracy z innymi typami danych dostarczanymi przez system OS X Services.

+0

Musisz zaznaczyć pole wyboru "Zastępuje zaznaczony tekst", aby to działało. Będzie także robić tylko jeden "Hello World"; nie jeden na każdą linię. Będziesz musiał zepsuć 'sys.stdin' do linii komponentu, aby zwrócić każdą linię. – dawg

+0

i gdzie znajduje się pole wyboru "Zastępuje zaznaczony tekst"? –

+0

czy można to wyeksportować do aplikacji (np. Do pobrania .app)? –

2

Jak wdrożyć - Powiedziałbym, że istnieją trzy możliwości:

  1. można użyć Automator i stworzyć usługę z akcji Uruchom skrypt powłoki.
  2. Możesz napisać akcję Automatora samodzielnie za pomocą Xcode i użyć tego w Automatorze i utworzyć z niego nową usługę. Korzyścią byłoby to, że mógłbyś napisać dla niego interfejs. Używasz powiązań, aby powiązać je z obiektem właściciela pliku. Klucze wiążące są następnie odzwierciedlane w skrypcie jako zmienne środowiskowe.
  3. Utwórz samodzielną usługę lub usługę współpracującą z aplikacją. Zaimplementowałem jeden zawarty w aplikacji. Tam możesz także zdefiniować osobny interfejs dla samej usługi.

Typy wejść - jeśli chcesz zdefiniować usługę, która ma być wyświetlana tylko w przypadku wybrania pewnych elementów, takich jak tekst lub adresy URL, możesz to zdefiniować na liście Info.plist tej usługi. Myślę, że powinna być możliwa edycja pliku Info.plist, który został wygenerowany przez Automatora, jeśli chcesz go jeszcze bardziej dostosować.

Istnieje świetny sposób debugowania usługi za pomocą TextEdit i jest to opisane w dokumentach wymienionych poniżej. Bardzo pomaga w debugowaniu, dlaczego usługa nie pojawia się na przykład w menu. Więcej informacji można znaleźć w Apple's service implementation guide

0

Znalazłem tę stronę, gdy próbowałem wykonać usługi Pythona. Chciałem podzielić się moim kompletnym rozwiązaniem, aby zaoszczędzić innym trochę czasu i być może uzyskać informacje zwrotne od bardziej doświadczonych programistów. Użyłem System Preference> Keyboard: Keybindings, aby ustawić "Application Sortcut: All Apps" dla tej usługi, dzięki czemu mogę wykonać wybrany tekst w dowolnym miejscu w systemie przy użyciu polecenia-shift-return. Zauważysz, że wszelkie wyjątki spowodują zastąpienie zaznaczenia oryginalnym tekstem. Działa z UNDO, jeśli nie uzyskałeś rezultatu, o który prosiłeś. Do tej pory lubię to bardzo!

Załóż obieg Automator jako usługa, usługa odbiera zaznaczony tekst w dowolnej aplikacji, wejście jest cały wybór, wyjście zastępuje wybrany tekst

Dodaj działanie skryptu run shell, shell:/usr/bin/python wejście wprost : jako argumenty

Kod ten idzie w polu:

import sys #, random 
try: 
    print eval(' '.join(sys.argv[1:])) 
except: 
try: 
     #This is a compound statement using variable assignment 
     code = compile(' '.join(sys.argv[1:]), '<string>', 'exec') 
     exec code 

    except: 
    print ' '.join(sys.argv[1:]) 

Oto kilka próbek, jak mogę skorzystać z tej usługi. Ponownie działa to w programie Mail, procesorach tekstu i innych aplikacjach.

Próbka 0: Podstawowe Math

>>> 42*24*60*60 
3628800 

Próbka 1: Pojedyncza linia, instrukcja złożona

>>> import random; foo = range(17); random.shuffle(foo); print(foo) 
[11, 14, 12, 3, 1, 4, 15, 7, 8, 13, 2, 16, 0, 10, 9, 6, 5] 

Próbka 2: wielowierszowego

>>> import random 
>>> foo = range(17) 
>>> random.shuffle(foo) 
>>> print(foo) 
[5, 16, 14, 10, 3, 11, 7, 15, 12, 0, 13, 2, 4, 1, 6, 9, 8] 

Próbka 3: Pętle

>>> for x in range(5): 
...  print x 
... 
0 
1 
2 
3 
4 
1

Jednym ze sposobów na zbudowanie usługi OS X za pomocą Pythona jest spakowanie aplikacji Python za pomocą py2app i edycja pliku Info.plist w celu dostarczenia potrzebnych pozycji menu w menu Serwis. Przykładowy plik plist można znaleźć pod adresem http://pythonhosted.org/pyobjc/examples/Cocoa/AppKit/SimpleService/index.html Musisz zbudować funkcjonalność, aby zaakceptować polecenia zdefiniowane w sekcji NSMessage Info.plist (patrz link wspomniany powyżej). Możesz użyć PyObjC, aby to zrobić. Jest to nieco trudniejsze niż korzystanie z Automatora, ale ma tę zaletę, że można połączyć całą funkcjonalność w jedną aplikację.

Powiązane problemy