2011-04-03 9 views
13

क्या आप पाइथन के साथ मैक ओएस एक्स सेवा बना सकते हैं? कैसे ?क्या आप पाइथन के साथ मैक ओएस एक्स सेवा बना सकते हैं? कैसे?

मैक ओएस एक्स द्वारा प्रदान की जाने वाली सेवा प्रणाली में हुक मेरे पायथन-फू को जानना है कि कोई भी जानता है कि कैसे? यदि हाँ कोई कामकाजी कोड स्निपेट? केवल पाठ पर या किसी दिए गए mimetype - परिभाषित ऑब्जेक्ट पर काम करेगा?

Service Popup

उत्तर

12
  • ओपन Automator.app और एक नई सेवा बनाएँ।

  • बाएं हाथ की कार्रवाइयों की सूची से "उपयोगिताएं" का चयन करें, फिर वर्कफ़्लो में "रन शैल स्क्रिप्ट" क्रिया को खींचें।

  • अपने खोल के रूप में /usr/bin/python चुनें।

  • कुछ अजगर टाइप करें।

: उदाहरण के लिए:

import sys 

for f in sys.stdin: 
    print "Hello World: " + f, 
  • सहेजें के रूप में, कहते हैं सेवा, "टेस्ट"

  • यह TextEdit.app में बाहर की कोशिश करो। कुछ टेक्स्ट टाइप करें, टेक्स्ट का चयन करें, फिर मेनू से टेक्स्ट एडिट -> सेवाएं -> टेस्ट चुनें। पाठ की प्रत्येक पंक्ति के लिए

ऊपर के उदाहरण पाठ के साथ काम करता है (अजगर कोड for f in sys.stdin के अनुसार): यह पहले जोड़ें चाहिए "नमस्ते विश्व"। संभवतः, इसे ओएस एक्स सेवा प्रणाली के माध्यम से प्रदान किए गए अन्य डेटा प्रकारों के साथ काम करने के लिए संशोधित किया जा सकता है।

+0

आपको काम करने के लिए "चयनित टेक्स्ट बदलता है" चेकबॉक्स चुनने की आवश्यकता है। यह केवल एक "हैलो वर्ल्ड" करेगा; प्रत्येक पंक्ति के लिए एक नहीं। प्रत्येक पंक्ति को वापस करने के लिए आपको 'sys.stdin' को अपनी घटक रेखाओं में तोड़ना होगा। – dawg

+0

और कहां है "चयनित टेक्स्ट बदलता है" चेकबॉक्स स्थित है? –

+0

इसे किसी एप्लिकेशन (यानी डाउनलोड करने योग्य .app) में निर्यात किया जा सकता है? –

2

लागू करने के लिए कैसे - मैं तीन संभावनाएं देखते हैं कि कह सकते हैं कि:

  1. आप स्वचालक का उपयोग करें और एक रन खोल स्क्रिप्ट कार्रवाई से एक सेवा बना सकते हैं।
  2. आप एक्सकोड का उपयोग करके स्वयं एक ऑटोमेटर कार्रवाई लिख सकते हैं और ऑटोमेटर में इसका उपयोग कर सकते हैं और इसमें से एक नई सेवा बना सकते हैं। लाभ यह होगा कि आप इसके लिए एक यूआई लिख सकते हैं। आप फाइल के मालिक ऑब्जेक्ट को बांधने के लिए बाइंडिंग का उपयोग करते हैं। बाध्यकारी कुंजी तब स्क्रिप्ट में पर्यावरण चर के रूप में दिखाई देती हैं।
  3. एक स्टैंड-अलोन सेवा या एक एप्लिकेशन के साथ चलने वाली सेवा बनाएं। मैंने आवेदन में शामिल एक लागू किया है। वहां आप केवल सेवा के लिए एक अलग यूआई परिभाषित कर सकते हैं।

इनपुट प्रकार - यदि आप केवल कुछ चीजों को चुनने के लिए सेवा को परिभाषित करना चाहते हैं, जैसे टेक्स्ट या यूआरएल, तो आप इसे उस सेवा के Info.plist में परिभाषित करेंगे। मुझे लगता है कि अगर आप इसे और कस्टमाइज़ करना चाहते हैं तो Automator द्वारा उत्पन्न Info.plist को संपादित करना संभव होना चाहिए।

टेक्स्ट एडिट का उपयोग करके सेवा को डीबग करने का एक शानदार तरीका है और यह नीचे उल्लिखित दस्तावेज़ों में वर्णित है। यह डीबग करने में बहुत मदद करता है कि मेनू में कोई सेवा क्यों नहीं दिख रही है, उदाहरण के लिए। अधिक जानकारी Apple's service implementation guide

0

पर पाया जा सकता है जब मैं पाइथन सेवा बनाने की कोशिश कर रहा था, तो मुझे यह पृष्ठ मिला। मैं दूसरों को थोडा समय बचाने के लिए अपना पूरा समाधान साझा करना चाहता था और शायद अधिक अनुभवी कोडर्स से कुछ फीडबैक प्राप्त करना चाहता था। मैंने सिस्टम वरीयता> कीबोर्ड का उपयोग किया: Keybindings इस सेवा के लिए "एप्लिकेशन सॉर्टकट: सभी ऐप्स" सेट करने के लिए, ताकि मैं कमांड-शिफ्ट-रिटर्न का उपयोग कर सिस्टम में कहीं भी चयनित टेक्स्ट निष्पादित कर सकूं। आप देखेंगे कि किसी भी अपवाद से मूल पाठ के साथ चयन को प्रतिस्थापित किया जाएगा। यूएनडीओ के साथ काम करता है अगर आपको नतीजा नहीं मिला तो आप बाद में थे। अब तक, मुझे यह बहुत पसंद है!

एक सेवा के रूप में एक स्वचालक कार्यप्रवाह बनाएँ, सेवा किसी भी आवेदन में चयनित पाठ प्राप्त करता है, इनपुट पूरे चयन है, उत्पादन चयनित की जगह पाठ

एक रन खोल स्क्रिप्ट कार्रवाई, खोल जोड़ें:/usr/bin/अजगर पास इनपुट : तर्क

इस कोड बॉक्स में चला जाता है के रूप में:

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:]) 

ये मैं इस सेवा का उपयोग कैसे हो सकता है के कुछ नमूने हैं। फिर, यह मेल, वर्ड प्रोसेसर और अन्य ऐप्स में काम करता है।

नमूना 0: मूलभूत गणित

>>> 42*24*60*60 
3628800 

नमूना 1: सिंगल लाइन, यौगिक बयान

>>> 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] 

नमूना 2: बहुपंक्ति

>>> 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] 

नमूना 3: लूप

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

पायथन का उपयोग कर ओएस एक्स सेवा बनाने का एक तरीका है py2app के साथ अपने पायथन ऐप को बंडल करना और सर्विस मेनू में आपको आवश्यक मेनू प्रविष्टियों को प्रदान करने के लिए Info.plist फ़ाइल को संपादित करना है। एक नमूना प्लिस्ट फ़ाइल http://pythonhosted.org/pyobjc/examples/Cocoa/AppKit/SimpleService/index.html पर पाई जा सकती है आपको Info.plist के NSMessage अनुभाग में परिभाषित आदेशों को स्वीकार करने के लिए कार्यक्षमता बनाने की आवश्यकता है (ऊपर उल्लिखित लिंक देखें)। ऐसा करने के लिए आप पीओओबीजेसी का उपयोग कर सकते हैं। ऑटोमेटर का उपयोग करने से यह थोड़ा सा ट्रिकियर है, लेकिन इसका लाभ यह है कि आप एक ही ऐप में पूरी कार्यक्षमता को बंडल कर सकते हैं।