अजगर नई Git नए नोटिफिकेशन डेमॉन का उपयोग करते हुए

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

छवि

लेख में उल्लेख किया गया है:
1. पायथन में डेमन;
2. अजगर में प्रवेश करना;
3. पायथन में कार्यक्रमों की कॉन्फ़िगरेशन फ़ाइलों का भंडारण;
4. पायथन लिपियों से ओएस कमांड के साथ काम करें;
5. गिट से हाल के परिवर्तनों की सूची प्राप्त करना;
6. मानक उबंटू पॉप-अप सूचनाएं।

कार्य को कार्यान्वित करने के लिए, पायथन को चुना गया था (एक उच्च-स्तरीय, व्याख्या की गई, ऑब्जेक्ट-ओरिएंटेड और एक्स्टेंसिबल प्रोग्रामिंग भाषा), क्योंकि मुझे नहीं पता है।
शुरू करने के लिए, दो स्रोतों ने मुझे बहुत मदद की:
- आधिकारिक दस्तावेज़: http://docs.python.org/tutorial/index.html
- रूसी में आईबीएम लेखों की एक श्रृंखला: https://www.ibm.com/developerworks/en/library/l-python_n_1/

मूल बातें सीखने के दौरान, हम एक कार्यक्रम लिखना शुरू करते हैं।

1. दानव


नेटवर्क पर राक्षसों के कई अहसास हैं, मैंने तैयार समीक्षाओं में से एक को सकारात्मक समीक्षा और एक आकर्षक नाम के साथ चुना: http://www.Jjik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ । इस डेमॉन को इस जगह डेमोनहोम स्टॉप कमांड के साथ बंद करने में समस्या थी:
except OSError, err: err = str(err) if err.find("No such process") > 0: if os.path.exists(self.pidfile): os.remove(self.pidfile) 

यह स्पष्ट रूप से रूसी लोकेल के कारण उत्पन्न हुआ, वाक्यांश "मेरे सिस्टम में ऐसी कोई प्रक्रिया नहीं " रूसी में वापस आ गई। इसे ठीक करने का एक आसान तरीका है इस चेक को हटाना:
 except OSError, err: if os.path.exists(self.pidfile): os.remove(self.pidfile) 


2. लॉगिंग


कार्यक्रम को सूचित करने का सबसे आसान तरीका प्रिंट () फ़ंक्शन का उपयोग कर रहा है। लेकिन यह कार्यक्रम एक डेमॉन के रूप में लॉन्च किया जाएगा और लॉन्च कंसोल में इसकी स्थिति के बारे में आउटपुट जानकारी शामिल नहीं है। इस मामले में एक सुविधाजनक विकल्प लॉग को एक फ़ाइल में लिखना है। पायथन में , लॉगिंग का एक अंतर्निहित तरीका है जो मानक पुस्तकालय का हिस्सा है - लॉगिंग मॉड्यूल ( http://docs.python.org/library/log.html )।
मॉड्यूल में कई लॉगिंग विकल्प ( हैंडलर , http://docs.python.org/library/log.handlers.html ) हैं: StreamHandler , FileHandler , WatchedFileHandler , RotatingFileHandler , TotRotatingFileHandler , SocketHandler , DatagramHandler , SysLogHandler NTandandler , HTTPHandler । डेमन को नियंत्रित करने के लिए, फाइलहैंडलर का उपयोग किया गया था :
 logging.basicConfig(filename = tempfile.gettempdir() + '/gitPushNotify.log', level = logging.DEBUG, format = '%(asctime)s %(levelname)s: %(message)s', datefmt = '%Y-%m-%d %I:%M:%S') logging.info('Daemon start') 


3. पायथन कार्यक्रमों के विन्यास को संग्रहीत करना


अनुप्रयोगों के कॉन्फ़िगरेशन को संग्रहीत करने के लिए, एक आईएनआई फ़ाइल और उनके साथ काम करने के लिए अंतर्निहित कॉन्फ़िगॉर मॉड्यूल का उपयोग किया जाता है ( http://docs.python.org/library/configparser.html ):
 config = ConfigParser.ConfigParser() configPath = os.path.dirname(__file__) + '/config.ini' config.read(configPath) 

कार्यों द्वारा पैरामीटर मान प्राप्त करना (इस मामले में, पूर्णांक मूल्य प्राप्त करना):
 timeout = config.getint('daemon', 'timeout') 


4. पायथन स्क्रिप्ट से ओएस कमांड के साथ काम करना


सिस्टम कमांड निष्पादित करने के लिए, सबप्रोसेस मॉड्यूल ( http://docs.python.org/library/subprocess.html ) के check_output () विधि का उपयोग करें:
 sourceOutput = subprocess.check_output('cd ' + repositoryPath, shell=True) 

आप ओएस मॉड्यूल विधियों का उपयोग भी कर सकते हैं:
 sourceOutput = os.system(commandString) 

प्रलेखन उपप्रकार का उपयोग करने की सिफारिश करता है।

5. गिट से हाल के परिवर्तनों की एक सूची प्राप्त करें


नवीनतम रिपॉजिटरी परिवर्तनों को देखने के लिए whatchanged कमांड ( http://schacon.github.com/git/git-whatchanged.html ) का उपयोग करना सुविधाजनक है। यह कमांड आपको प्रदर्शित किए गए लॉग संदेशों के प्रारूप को सेट करने, प्रदर्शित किए गए परिवर्तनों की संख्या निर्धारित करने की अनुमति देता है। कमांड उपयोग उदाहरण:
$ git whatchanged master -10 --date=raw --date-order --pretty=format:"%H %n%cn %n%ce %n%ct %n%s"

क्रम में तर्क:
मास्टर - भंडार शाखा;
-10 - प्रदर्शित रिकॉर्ड की संख्या;
--डेट-आदेश - संशोधित तिथि के अनुसार;
- व्याख्या = स्वरूप: "..." - आउटपुट स्वरूप।

6. मानक उबंटू पॉपअप सूचनाएं


उबंटू में पॉप-अप नोटिफिकेशंस के साथ काम विमोचन पुस्तकालय ( https://wiki.ubuntu.com/NotificationDevelopmentGuidelines ) के माध्यम से किया जाता है। जांचें कि क्या यह कमांड द्वारा स्थापित है:
$ dpkg -l | grep libnotify-bin

या तुरंत निष्पादित करें:
$ sudo apt-get install libnotify-bin

आप कमांड का उपयोग करके एक अधिसूचना प्रदर्शित कर सकते हैं:
$ notify-send "Habr!"
$ notify-send -i notification-message-email "Title" "Message"

-I झंडा एक छवि है, svg , png या jpg प्रारूप में किसी भी छवि के लिए सिस्टम नाम या पथ का संकेत दिया गया है।

डेमॉन लॉन्च


आपको फ़ाइल को निष्पादन योग्य बनाना होगा:
$ chmod +x gitPushNotifyDaemon.py

कॉन्फ़िगरेशन फ़ाइल में शुरू करने से पहले, आपको रिपॉजिटरी और मतदान आवृत्ति के लिए पथ निर्दिष्ट करना होगा:
$ vim config.ini

चल रहा है:
$ python gitPushNotifyDaemon.py start

यदि सब कुछ ठीक रहा:
Daemon starting..

एक प्रारंभ सूचना दिखाई देगी:

छवि

अब डेमॉन को कमांड चलाकर प्रक्रियाओं की सूची में देखा जा सकता है:
$ ps uax | grep gitPushNotifyDaemon.py

आप लॉग का उपयोग कर डेमन की प्रक्रिया का निरीक्षण कर सकते हैं:
$ tail -f /tmp/gitPushNotify.log

आप डिबगिंग के लिए अलग से gitPushNotify.py फ़ाइल भी चला सकते हैं:
$ python gitPushNotify.py


प्रोजेक्ट रिपोजिटरी: https://github.com/antonfisher/gitPushNotify

वह सब है। आपका दिन शुभ हो!

संदर्भ:
1. http://docs.python.org/tutorial/index.html - आधिकारिक ट्यूटोरियल;
2. https://www.ibm.com/developerworks/ru/library/l-python_part_1/ - IBM लेखों की श्रृंखला;
3. http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/ - सैंडर मारेचल से डेमन का कार्यान्वयन;
4. http://docs.python.org/library/log.html - पायथन , लॉगिंग मॉड्यूल;
5. http://docs.python.org/library/configparser.html - पायथन , मॉड्यूल कॉन्फिगरेशन ;
6. http://docs.python.org/library/subprocess.html - पायथन , सबप्रोसेस मॉड्यूल;
7. https://wiki.ubuntu.com/NotificationDevelopmentGuidelines - libnotify का वर्णन;
8. http://schacon.github.com/git/git-whatchanged.html git-whatchanged कमांड विवरण।

Source: https://habr.com/ru/post/In135408/


All Articles