Pergunta

Eu estou trabalhando em um programa Python que faz uso pesado de ovos (Plone). Isso significa que há 198 diretórios cheios de código Python eu poderia querer pesquisar durante a depuração. Existe uma boa maneira de pesquisar apenas os arquivos .py em somente os diretórios, evitando código independentes e grandes arquivos binários?

Foi útil?

Solução

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

A propósito, uma vez escrevendo isso, eu descobri ack , que é uma solução muito melhor.

(ag E desde aquela edição, eu descobri).

Outras dicas

Eu recomendaria fortemente ack , um substituto grep "dirigido a programadores com grandes árvores de código fonte heterogêneo" ( a partir do site)

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

Eu também uso ack muito estes dias. Eu fiz ajustá-lo um pouco para encontrar todos os tipos de arquivos relevantes:

# 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 a lembrar é que ack não vai encontrar arquivos se a extensão não está na sua configuração. Consulte "ack --help-tipos" para todos os tipos disponíveis.

Eu também supor que você está usando omelete assim você pode grep / ack / encontrar todos os arquivos relacionados?

Este problema foi a motivação para a criação de collective.recipe.omelette. É uma receita buildout que pode ligar simbolicamente todas os ovos de seu conjunto de trabalho em uma estrutura de diretório, que você pode apontar o seu utilitário de pesquisa favorito no.

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

Há também GNU idutils se você quiser pesquisar por identificadores em uma árvore fonte grandes muito rapidamente. Ele requer a construção de um banco de dados de pesquisa com antecedência, através da execução MKID (e aprimorando seu arquivo de configuração para não ignorar arquivos .py). z3c.recipe.tag cuida de que, se você usar buildout.

Apenas no caso de você querer um não-comando solução OSS ...

Eu uso PyCharm. Ele tem suporte embutido para o buildout. Você apontá-lo para um buildout gerado bin / instância e define os projetos dependências externas para todos os ovos utilizados pela instância. Então tudo introspecção e navegação de código de trabalho do IDE bem. Ir à definição, Goto casos, refatoração apoio e de pesquisa curso.

Eu recomendo sorriso de pesquisa, omelete quando se trabalha com Plone e o recurso pydev 'Globals navegador' (com o Eclipse ou aptana estúdio).

E simplesmente porque não há suficiente respostas ...

Se você está desenvolvendo rotineiramente, vale bem a pena o esforço para instalar o Eclipse com Pydev (ou ainda mais fácil, Aptana Studio - que é um Eclipse modificado)., Caso em que as ferramentas encontrar são ali

A minha vida grepping é maneira mais satisfatória desde descobrir comando rgrep Emacs'.

Digamos que eu queira encontrar 'IPortletDataProvider' na fonte do Plone. Eu faço:

  1. M-x rgrep
  2. prompts Emacs para a cadeia de pesquisa (IPortletDataProvider)
  3. ... então quais arquivos para procurar (* .py)
  4. ... então qual diretório (~ / Plone / buildout-cache / ovos). Se eu já estou editando um arquivo, o padrão para o diretório desse arquivo, que geralmente é exatamente o que eu quero.

Os resultados aparecem em um novo buffer. No topo está o comando find | xargs grep Emacs correu. Todos os jogos são realçados. Posso pesquisar o buffer usando os comandos de pesquisa de texto padrão. O melhor de tudo, eu posso bater Enter (ou clique) em um jogo para abrir esse arquivo.

É uma muito boa maneira de trabalho. Eu gosto que eu não tenho a recordar sequências argumento find | xargs grep, mas que tudo o que poder está lá se eu precisar dele.

Emacs rgrep exemplo

OpenGrok é uma excelente escolha para a pesquisa de origem e de navegação. Funciona em Java, apesar de tudo.

Eu realmente gostaria que houvesse algo como http://opengrok.plone.org/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top