2009-05-14 9 views
16

मैं एक पायथन प्रोग्राम पर काम कर रहा हूं जो अंडे (प्लोन) का भारी उपयोग करता है। इसका मतलब है कि पाइथन कोड से भरे 198 निर्देशिकाएं हैं जिन्हें मैं डिबगिंग के दौरान खोजना चाहता हूं। क्या केवल उन निर्देशिकाओं में .py फ़ाइलों को खोजने का कोई अच्छा तरीका है, असंबद्ध कोड और बड़ी बाइनरी फ़ाइलों से परहेज करना?आप कोड के माध्यम से कैसे गुजरते हैं जो कई अलग-अलग निर्देशिकाओं में रहता है?

उत्तर

19
find DIRECTORY -name "*.py" | xargs grep PATTERN 

वैसे, इस लेखन के बाद से, मैं ack है, जो एक बेहतर समाधान है की खोज की है।

+0

खोजने कुछ था '$ PYTHONPATH गूंज | sed "s /:/g" '-name" * .py "| xargs grep pATTERN – joeforker

+0

यह अच्छा है। उस बारे में सोचा नहीं था। –

+0

सौभाग्य से $ PYTHONPATH में प्रविष्टियों में से कोई भी '' 'नहीं है। – joeforker

9
grep -r -n "PATTERN" --include="*.py" DIRECTORY 
+0

मुझे लाइन नंबर शामिल करने के लिए -n पसंद है। आश्चर्य की बात है, 'खोज | xargs' संस्करण थोड़ा तेज है। – joeforker

+0

मुझे लगता है कि grep हालांकि लगातार खोजों में तेजी से बढ़ता है। –

4

< निर्देशिका > -name '* .py' -exec ग्रेप < पैटर्न > {} \ प्राप्त होता है;

+1

यह संस्करण 26 गुना धीमा है xargs या standalone grep समाधान क्योंकि यह एक बार के बजाय grep 16,836 बार निष्पादित करता है। – joeforker

+2

लेकिन यदि आप इसे \ + के बजाय + के साथ समाप्त करते हैं, तो यह xargs समाधान के बराबर है, सिवाय इसके कि आपके पथनामों में रिक्त स्थान नहीं है, तो इसे तोड़ना नहीं है। –

18

मैं दृढ़ता से ack की सिफारिश करेंगे, एक ग्रेप विकल्प नहीं है, (वेबसाइट से) "विषम स्रोत कोड के बड़े पेड़ के साथ प्रोग्रामर के उद्देश्य से"

6

मैं भी इन दिनों एक बहुत पावती का उपयोग करें।

# Add zcml to the xml type: 
--type-add 
xml=.zcml 

# Add more files the plone type: 
--type-add 
plone=.dtml,.zpt,.kss,.vpy,.props 

# buildout config files 
--type-set 
buildout=.cfg 

# Include our page templates to the html type so we can limit our search: 
--type-add 
html=.pt,.zpt 

# Create txt file type: 
--type-set 
txt=.txt,.rst 

# Define i18n file types: 
--type-set 
i18n=.pot,.po 

# More options 
--follow 
--ignore-case 
--nogroup 

याद रखना महत्वपूर्ण है कि पावती अगर विस्तार इसके विन्यास में नहीं है फ़ाइलें नहीं मिलेगा है: मैं यह थोड़ा सभी प्रासंगिक फ़ाइल प्रकारों को खोजने के लिए tweak किया था। सभी उपलब्ध प्रकारों के लिए "एके --हेल्प-प्रकार" देखें।

मुझे यह भी लगता है कि आप omelette का उपयोग कर रहे हैं ताकि आप सभी संबंधित फाइलों को grep/ack/ढूंढ सकें?

2

GNU idutils भी है यदि आप बड़े स्रोत पेड़ में पहचानकर्ताओं के लिए बहुत तेज़ी से grep करना चाहते हैं। इसे mkid चलाकर, और इसकी कॉन्फ़िगरेशन फ़ाइल को tweaking .py फ़ाइलों को अनदेखा करने के लिए अग्रिम में एक खोज डेटाबेस बनाने की आवश्यकता है)। यदि आप बिल्डआउट का उपयोग करते हैं, तो z3c.recipe.tag इसका ख्याल रखता है।

1

Emacs 'rgrep कमांड की खोज के बाद से मेरा grepping जीवन अधिक संतोषजनक तरीका है।

कहें कि मैं प्लोन के स्रोत में 'आईपोर्टलेटडाटाप्रोवाइडर' ढूंढना चाहता हूं। मुझे क्या करना:

  1. M-x rgrep
  2. Emacs खोज स्ट्रिंग के लिए संकेत देता (IPortletDataProvider)
  3. ... तो जो खोज करने के लिए फ़ाइलें (* .py)
  4. ... तो जो निर्देशिका (~/प्लोन/buildout-कैश/अंडे)। अगर मैं पहले से ही एक फ़ाइल संपादित कर रहा हूं, तो यह उस फ़ाइल की निर्देशिका में चूक जाता है, जो आमतौर पर वही है जो मैं चाहता हूं।

परिणाम एक नए बफर में दिखाई देते हैं। शीर्ष पर find | xargs grep कमांड Emacs भाग गया है। सभी मैचों को हाइलाइट किया गया है। मैं मानक पाठ खोज आदेशों का उपयोग कर बफर खोज सकता हूं। सबसे अच्छा, मैं उस फ़ाइल को खोलने के लिए एक मैच पर एंटर (या क्लिक) हिट कर सकता हूं।

यह काम करने का एक शानदार तरीका है। मुझे पसंद है कि मुझे find | xargs grep तर्क अनुक्रमों को याद रखने की आवश्यकता नहीं है, लेकिन अगर मुझे इसकी ज़रूरत है तो वह सारी शक्ति है।

Emacs rgrep example

1

बस मामले में आप एक गैर कमांडलाइन ओएसएस समाधान चाहते हैं ...

मैं pycharm का उपयोग करें। यह buildout के लिए समर्थन में बनाया गया है।आप इसे बिल्डआउट जेनरेट किए गए बिन/इंस्टेंस पर इंगित करते हैं और यह प्रोजेक्ट बाहरी प्रस्तुतियों को उदाहरण के द्वारा उपयोग किए जाने वाले सभी अंडों पर सेट करता है। फिर सभी आईडीई का आत्मनिरीक्षण और कोड नेविगेशन अच्छी तरह से काम करता है। गोटो परिभाषा, गोटो इंस्टेंस, समर्थन और पाठ्यक्रम की खोज को पुन: सक्रिय करना।

4

यह समस्या collective.recipe.omelette के निर्माण के लिए प्रेरणा थी। यह एक बिल्डआउट रेसिपी है जो आपके काम के सेट से सभी अंडों को एक निर्देशिका संरचना में सिमलिंक कर सकती है, जिसे आप अपनी पसंदीदा खोज उपयोगिता को इंगित कर सकते हैं।

+0

grep- उन्मुख उत्तरों लाल बालियां हैं। वे आपको फ़ाइलों के कई संस्करणों को खोजने के लिए नेतृत्व करेंगे, लेकिन कोड के अन-उपयोग किए गए संस्करणों में से एक (बिल्डआउट समय के साथ अलग-अलग अंडे रिलीज प्राप्त कर सकता है)। आमलेट का प्रयोग करें, और जीआरपी सिम्लिंक संरचना जो इसे उत्पन्न करता है। –

2

मैं प्लोन और पाइडव-फीचर 'ग्लोबल्स ब्राउजर' (ग्रहण या अपताना स्टूडियो के साथ) के साथ काम करते समय omelette खोजने के लिए grin की पुन: सिफारिश करता हूं।

+0

यहां ग्रिन के बारे में पढ़ें: http://rhodesmill.org/brandon/2011/grin-and-search-it – pbauer

+0

ग्रहण में omelette + src फ़ोल्डर आयात करने के लिए सहायक स्क्रिप्ट्स हैं: http://svn.plone.org/svn /collective/collective.eclipsescripts/trunk/README.txt –

2

और बस क्योंकि वहाँ पर्याप्त जवाब नहीं हैं ...

आप नियमित तौर पर विकसित कर रहे हैं, तो यह अच्छी तरह से लायक Pydev (या और भी आसान, Aptana स्टूडियो - जो एक संशोधित ग्रहण है) के साथ ग्रहण स्थापित करने के लिए प्रयास है , इस मामले में खोजने के उपकरण सही हैं।

+0

यहां एक ऐसी स्क्रिप्ट है जो आयात बिल्डआउट + ओमेलेट को Aptana में अनुमति देती है: http://svn.plone.org/svn/collective/collective.eclipsescripts/trunk/README.txt –

1

ओपनग्राक स्रोत खोज और नेविगेशन के लिए एक उत्कृष्ट विकल्प है। हालांकि, जावा पर चलता है।

मैं वास्तव में चाहते हैं वहाँ की तरह http://opengrok.plone.org/

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

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