2011-02-01 13 views
6

के साथ बदल गई है या नहीं, मेरे पास एक प्रोग्राम है जो किसी विशिष्ट निर्देशिका में फ़ाइलें बनाते हैं। जब वे फ़ाइलें तैयार होती हैं, तो मैं .pdf फ़ाइल बनाने के लिए लेटेक्स चलाता हूं। तो, मेरा सवाल यह है कि, मैं इस निर्देशिका का उपयोग ट्रिगर के रूप में एक स्क्रिप्ट स्क्रिप्ट या पायथन स्क्रिप्ट का उपयोग करके लेटेक्स को कॉल करने के लिए कैसे कर सकता हूं?जांचें कि निर्देशिका सामग्री शैल स्क्रिप्ट या पायथन

बेस्ट सादर

उत्तर

5

inotifydnotify को प्रतिस्थापित करता है।

Why?

... dnotify प्रत्येक निर्देशिका है कि आप परिवर्तन के लिए देखने के लिए इरादा के लिए एक फ़ाइल वर्णनकर्ता खोलने की आवश्यकता है ...

इसके अतिरिक्त, फ़ाइल डिस्क्रिप्टर निर्देशिका को पिन करता है, बैकिंग डिवाइस को अनमाउंट करने की अनुमति नहीं देता है, जो हटाने योग्य मीडिया से जुड़े परिदृश्यों में समस्याएं पैदा करता है। इनोटिफ़ाई का उपयोग करते समय, यदि आप फ़ाइल सिस्टम पर फ़ाइल देख रहे हैं जो अनमाउंट किया गया है, तो घड़ी स्वचालित रूप से हटा दी जाती है और आपको एक अनमाउंट ईवेंट प्राप्त होता है।

... और अधिक।

More Why?

अपने पूर्वज dnotify के विपरीत, inotify विभिन्न सीमाओं से अपने काम को मुश्किल नहीं है। उदाहरण के लिए, यदि आप हटाने योग्य मीडिया पर फ़ाइलों को देखते हैं तो ये फ़ाइल लॉक नहीं होती हैं। इसकी तुलना में, dnotify फ़ाइलों को स्वयं को खोलने की आवश्यकता होती है और इस प्रकार वास्तव में उन्हें "ताले" (मीडिया को अनमाउंट करने वाले हथौड़ों)।

Reference

3

यूनिक्स सिस्टम पर बनाओ आमतौर पर उस तारीख को ट्रैक करने के लिए उपयोग किया जाता है जब फ़ाइलों को बदलते समय पुनर्निर्माण की आवश्यकता होती है। मैं आमतौर पर इस नौकरी के लिए rather good makefile का उपयोग करता हूं। ऐसा लगता है कि Google कोड पर alternative भी

1

एक पाइथन आदमी स्वयं नहीं है। लेकिन एक चुटकी में, मान लीजिए कि आप लिनक्स पर हैं, आप समय-समय पर खोल सकते हैं और "ls -lrt/path/to/directory" (निर्देशिका सामग्री प्राप्त करें और अंतिम संशोधित द्वारा क्रमबद्ध करें), और पिछले दो कॉल के परिणामों की तुलना करें एक अंतर के लिए। यदि हां, तो एक बदलाव आया था। बहुत विस्तृत नहीं है, लेकिन काम पूरा हो जाता है।

2

Python FAMFAM के लिए एक अजगर इंटरफेस (फ़ाइल बदलाव मॉनिटर)

तुम भी Pyinotify पर एक नज़र है, जो निगरानी फाइल सिस्टम में परिवर्तन के लिए एक मॉड्यूल है हो सकता है है।

3

आपको केवल परिवर्तनों की जांच करने की आवश्यकता नहीं है, लेकिन यह जानने की आवश्यकता है कि सभी परिवर्तन LaTeX चलाने से पहले पूर्ण हो गए हैं। उदाहरण के लिए, यदि आप पहली फ़ाइल को संशोधित करने के बाद लाटेक्स शुरू करते हैं और अधिक परिवर्तन अभी भी लंबित हैं, तो आप आंशिक डेटा का उपयोग करेंगे और बाद में पुनः चलाने होंगे।

अपने पहले कार्यक्रम को पूरा करने के लिए के लिए

प्रतीक्षा:

#!/bin/bash 
first-program && 
    run-after-changes-complete 

& & उपयोग करने का अर्थ पहले सफलतापूर्वक पूरा (एक शून्य से बाहर निकलें कोड) यदि दूसरा आदेश केवल निष्पादित किया जाता है। चूंकि यह सरल स्क्रिप्ट हमेशा दूसरी कमांड चलाएगी, भले ही पहले कोई भी फाइल नहीं बदले, फिर भी आप इसे जो भी निर्माण प्रणाली से पहले से परिचित कर रहे हैं, उसमें शामिल कर सकते हैं।

0

आप देशी अजगर मॉड्यूल hashlib जो MD5 एल्गोरिदम लागू करता है का उपयोग कर सकते हैं:

>>> import hashlib 
>>> import os 
>>> m = hashlib.md5() 
>>> for root, dirs, files in os.walk(path): 
    for file_read in files: 
     full_path = os.path.join(root, file_read) 
     for line in open(full_path).readlines(): 
      m.update(line) 


>>> m.digest() 
'pQ\x1b\xb9oC\x9bl\xea\xbf\x1d\xda\x16\xfe8\xcf' 

आप किसी फ़ाइल या एक चर में इस परिणाम को बचा सकता है, और अगले रन का परिणाम की तुलना। यह किसी भी उप-निर्देशिका में किसी भी फाइल में परिवर्तन का पता लगाएगा।

यह फ़ाइल अनुमति परिवर्तनों को ध्यान में रखता नहीं है; यदि आपको इन परिवर्तनों की निगरानी करने की आवश्यकता है, तो इसे अनुमतियों का प्रतिनिधित्व करने वाली स्ट्रिंग को जोड़कर संबोधित किया जा सकता है (उदाहरण के लिए os.stat के माध्यम से सुलभ, गुण आपके सिस्टम पर निर्भर करते हैं) m चर पर।

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