Domanda

Sto lavorando su un programma Python che fa grande uso di uova (Plone). Ciò significa che ci sono 198 directory piene di codice Python potrei desiderare per la ricerca in durante il debug. C'è un buon modo per cercare solo i file .py in soli queste directory, evitando di codice estraneo e grandi file binari?

È stato utile?

Soluzione

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

A proposito, dal momento che la scrittura di questo, ho scoperto ACK , che è una soluzione molto migliore.

(E dal momento che modifica, ho scoperto ag).

Altri suggerimenti

consiglio vivamente ACK , sostituto grep "volto a programmatori con grandi alberi di codice sorgente eterogenea" ( dal sito web)

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

Io uso anche ACK molto in questi giorni. Ho fatto modificarlo un po 'per trovare tutti i tipi di file rilevanti:

# 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

importante da ricordare è che ACK non trovare i file se l'estensione non è nella sua configurazione. per tutti i tipi disponibili, vedere "ACK --help-tipi".

Suppongo inoltre che si sta utilizzando frittata così è possibile grep / ACK / trovare tutti i file correlati?

Il problema è stata la motivazione per la creazione di collective.recipe.omelette. E 'una ricetta che può buildout link simbolico tutte le uova dal vostro lavoro impostato in una struttura di directory, che si può puntare il programma di utilità di ricerca preferito a.

find <directory> -name '*.py' -exec grep <pattern> {} \;

C'è anche GNU idutils se si vuole grep per identificatori in un grande albero di fonte molto molto rapidamente. Si richiede la costruzione di un database di ricerca in anticipo, eseguendo mkid (e tweaking il suo file di configurazione di non ignorare i file .py). z3c.recipe.tag si occupa di questo, se si utilizza buildout.

Nel caso in cui si desidera una soluzione non-riga di comando OSS ...

Io uso PyCharm. E 'un supporto incorporato per buildout. Si punta in un secondo buildout generato bin / istanza e imposta il progetti dipendenze esterne a tutte le uova utilizzate dall'istanza. Poi tutto l'introspezione e la navigazione del codice di lavoro della IDE bene. Definizione Goto, le istanze Goto, supporto refactoring e di ricerca naturalmente.

ghigno per la ricerca, frittata quando si lavora con Plone e il pydev di funzionalità 'Globals del browser' (con Eclipse o in studio Aptana).

E semplicemente perché non ci sono abbastanza risposte ...

Se si sta sviluppando di routine, vale la pena lo sforzo per installare Eclipse con Pydev (o ancora più semplice, Aptana Studio - che è un Eclipse modificato)., Nel qual caso gli strumenti di find sono proprio lì

La mia vita grep è il modo più soddisfacente in quanto la scoperta di comando rgrep Emacs'.

dire che voglio trovare 'IPortletDataProvider' in fonte di Plone. Faccio:

  1. M-x rgrep
  2. Emacs richiede la stringa di ricerca (IPortletDataProvider)
  3. ... poi i file da ricercare (* .py)
  4. ... quindi quale directory (~ / Plone / buildout-cache / uova). Se sto già modificando un file, le impostazioni di default directory del file, che di solito è esattamente quello che vogliono.

I risultati vengono visualizzati in un nuovo buffer. Nella parte superiore è il comando find | xargs grep Emacs corse. Tutte le partite sono evidenziati. Posso cercare il buffer utilizzando i comandi di ricerca di testo standard. Meglio di tutti, posso premere Invio (o fare clic) su una partita per aprire quel file.

E 'un modo molto bello per lavorare. Mi piace che non devo ricordare <=> sequenze di argomenti, ma che tutto ciò che il potere è lì, se ne ho bisogno.

Emacs rgrep esempio

OpenGrok è una scelta eccellente per la ricerca e la navigazione fonte. Gira su Java, però.

Mi piacerebbe che ci fosse qualcosa di simile a http://opengrok.plone.org/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top