2011-11-18 9 views
7

पर "ड्रॉप" फ़ाइलों/फ़ोल्डरों द्वारा पाइथन लिपि में पथ नाम कैसे पारित करें मै मैक ओएस एक्स में काम कर रहा हूं और पाइथन में सरल फ़ाइल/फ़ोल्डर कॉपी स्क्रिप्ट लिख रहा हूं। क्या किसी पाइथन स्क्रिप्ट आइकन के शीर्ष पर फ़ोल्डर खींचने और ड्रॉप करने का कोई तरीका है और स्क्रिप्ट में फ़ाइल या फ़ोल्डर के पथ को तर्क के रूप में पास करते हैं?स्क्रिप्ट आइकन

वर्तमान में, मेरे पास एक ऐप्पलस्क्रिप्ट बूंद है (जो ड्रैग और ड्रॉप का समर्थन करता है) जो पाइथन में गिराए गए फ़ोल्डर्स और फ़ाइलों के पथ को पास करता है। हालांकि, मैं ऐप्पलस्क्रिप्ट और पायथन स्क्रिप्ट के बजाय सिर्फ एक पायथन लिपि रखना चाहता हूं।

किसी भी मदद की सराहना की जाएगी।

उत्तर

3

बस "बिल्ड एप्लेट" उपयोगिता का उपयोग करें:

/Developer/Applications/Utilities/MacPython\ 2.5/Build\ Applet.app 

और गिरा फ़ाइल पथ sys.argv के माध्यम से उपलब्ध हो जाएगा। -

नोट आप Python2.5 (या एक समझौता संस्करण) का उपयोग करने के लिए हो सकता है कि इस नोट देखें: https://bitbucket.org/ronaldoussoren/py2app/issue/16/argv-emulation-code-needs-rewrite

त्वरित उदाहरण - इस फ़ाइल को संपादित और अपने डेस्कटॉप पर डाल दिया:

#!/usr/bin/python2.5 
import sys 
print sys.argv 
इस पर

नियंत्रण-क्लिक करें और "एप्लेट (2.5.4) का निर्माण"

अनुप्रयोग चिह्न डेस्कटॉप पर दिखाई देगा के साथ खुला का चयन करें।

ओपन कंसोल उपयोगिता & स्पष्ट प्रदर्शन।

कुछ फ़ाइलों को ऐप आइकन पर छोड़ दें - आपको कंसोल विंडो में प्रिंट दिखाई देगा।

+0

धन्यवाद एक बहुत स्टीवन, इस वास्तव में मैं क्या जरूरत है: डिबगिंग के लिए संभावित समाधान, सेटअप कस्टम excepthook और आउटपुट कुछ सादा पाठ फ़ाइल में सभी अपवाद है। – John1538

1

मैक ओएस सर्विसेज आपको वास्तव में क्या पसंद हो सकता है। वे ऑटोमेटर वर्कफ़्लो हैं जो एक संदर्भ-विशिष्ट तरीके से ऑपरेटिंग सिस्टम में अच्छी तरह से एकीकृत कर सकते हैं: उदा। जब आप कोई फ़ोल्डर चुनते हैं तो आप अपनी स्क्रिप्ट को खोजक के संदर्भ मेनू में प्रकट कर सकते हैं।

आप निम्नलिखित तरीके से अजगर स्क्रिप्ट से सेवा कर सकते हैं:

  1. ओपन Automator.app और एक नया सेवा बनाएँ;
  2. वर्कफ़्लो ब्लॉक के शीर्ष पर आप चुनते हैं कि आपका एप्लिकेशन किस प्रकार का इनपुट अपेक्षा करता है (अगर मैं सही ढंग से समझता हूं तो फ़ोल्डर आपकी पसंद है);
  3. वर्कफ़्लो में बाएं फलक से "रन शैल स्क्रिप्ट" ब्लॉक खींचें;
  4. अब आप या तो उपयोग डिफ़ॉल्ट बैश खोल (/bin/bash) अपनी स्क्रिप्ट कॉल करने के लिए कर सकते हैं:

    /full/path/to/your/python /full/path/to/your/script.py [email protected] 
    

  5. या /usr/bin/python का उपयोग (डिफ़ॉल्ट अजगर) और अपने कोड पाठ खंड में सीधे पेस्ट कर;

  6. ब्लॉक के ऊपरी दाएं कोने में सेट करना न भूलें।

ऐसे वर्कफ़्लो को डीबग करना थोड़ा मुश्किल है (जैसा कि आप & stderr stdout नहीं देखेंगे)।

import sys, traceback 

def excepthook(type, exc, tb): 
    with open("error.log", "a") as f: 
     traceback.print_exc(file=f) 

sys.excepthook = excepthook 
+0

आपकी मदद के लिए बहुत बहुत धन्यवाद, डेन। – John1538

संबंधित मुद्दे